PHP 是一門弱類型語言,不需要也不支持在聲明變量時指定類型。一個變量的類型完全由其上下文環境決定——即根據該變量被使用的方式自動推斷。例如,若將字符串賦值給變量 $var,它即成為字符串類型;隨後若將整數賦給同一變量,它又會轉為整數類型。
加法運算符 + 完美展示了 PHP 的自動類型轉換規則:
$foo = "0"; // $foo 是字符串 "0" (ASCII 48)
$foo++; // $foo 仍是字符串 "1" (ASCII 49)
$foo += 1; // $foo 變為整數 2
$foo = $foo + 1.3; // $foo 變為浮點數 3.3
$foo = 5 + "10 Little Piggies"; // $foo 為整數 15
$foo = 5 + "10 Small Pigs"; // $foo 為整數 15
最後兩例中,字符串以數字開頭,PHP 提取前導數字參與運算;若字符串不以數字開頭,則值為 0。詳細規則請參閱「字符串轉換為數值」章節。
若需強制變量按特定類型計算,可使用 類型強制(casting),語法同 C 語言:在變量前加上目標類型的括號。
$foo = 10; // 整數
$bar = (double) $foo; // $bar 為浮點數
支持的強制類型:
(int), (integer) — 強制為整數(real), (double), (float) — 強制為浮點數(string) — 強制為字符串(array) — 強制為數組(object) — 強制為對象括號內允許空格與制表符,故 (int)$bar 與 ( int )$bar 等價。
當字符串作為數值參與運算時:
.、e 或 E,視為浮點數;否則視為整數。$foo = 1 + "10.5"; // 浮點數 11.5
$foo = 1 + "-1.3e3"; // 浮點數 -1299
$foo = 1 + "bob-1.3e3"; // 整數 1 (非數字開頭)
$foo = 1 + "bob3"; // 整數 1
$foo = 1 + "10 Small Pigs"; // 整數 11
$foo = 1 + "10 Little Piggies"; // 整數 11
由於 PHP 自動管理類型,有時需明確獲取變量當前類型,常用函數包括:
gettype() — 返回類型名稱字符串is_int(), is_float(), is_string(), is_array(), is_object() — 判斷特定類型,返回布爾值善用這些函數可幫助調試與編寫更健壯的代碼。