PHP 在變量定義中不需要(或不支持)明確的類型定義;變量類型是根據(jù)使用該變量的上下文所決定的。也就是說,如果把一個 string 值賦給變量 $var,$var 就成了一個 string。如果又把一個int 賦給 $var,那它就成了一個int。
PHP 的自動類型轉(zhuǎn)換的一個例子是乘法運算符“*”。如果任何一個操作數(shù)是float, 則所有的操作數(shù)都被當(dāng)成float,結(jié)果也是float。 否則操作數(shù)會被解釋為int,結(jié)果也是int。 注意這并沒有改變這些操作數(shù)本身的類型; 改變的僅是這些操作數(shù)如何被求值以及表達式本身的類型。
<?php
$foo = "1"; // $foo 是字符串 (ASCII 49)
$foo *= 2; // $foo 現(xiàn)在是一個整數(shù) (2)
$foo = $foo * 1.3; // $foo 現(xiàn)在是一個浮點數(shù) (2.6)
$foo = 5 * "10 Little Piggies"; // $foo 是整數(shù) (50)
$foo = 5 * "10 Small Pigs"; // $foo 是整數(shù) (50)
?>
如果上面兩個例子看上去古怪的話,參見如何將 數(shù)字字符串轉(zhuǎn)換為數(shù)值。
如果要強制將一個變量當(dāng)作某種類型來求值,參見類型強制轉(zhuǎn)換一節(jié)。如果要改變一個變量的類型,參見 settype()。
如果想要測試本節(jié)中任何例子的話,可以用 var_dump() 函數(shù)。
注意:
自動轉(zhuǎn)換為 數(shù)組 的行為目前沒有定義。
此外,由于 PHP 支持使用和數(shù)組下標(biāo)同樣的語法訪問字符串下標(biāo),以下例子在所有 PHP 版本中都有效:
<?php
$a = 'car'; // $a 是 string
$a[0] = 'b'; // $a 仍然是 string
echo $a; // bar
?>請參閱存取和修改字符串中的字符一節(jié)以獲取更多信息。
PHP 中的類型強制轉(zhuǎn)換和 C 中的非常像:在要轉(zhuǎn)換的變量之前加上用括號括起來的目標(biāo)類型。
<?php
$foo = 10; // $foo is an integer
$bar = (boolean) $foo; // $bar is a boolean
?>
允許的強制轉(zhuǎn)換有:
向前兼容 (binary) 轉(zhuǎn)換和 b 前綴轉(zhuǎn)換。注意 (binary) 轉(zhuǎn)換和 (string) 基本相同,但是不應(yīng)該依賴它。
(unset) 轉(zhuǎn)換在 PHP 7.2.0 中已被廢棄。請注意 (unset) 轉(zhuǎn)換等于將值賦予 NULL。(unset) 轉(zhuǎn)換已經(jīng)在 PHP 8.0.0 中被移除。
注意在括號內(nèi)允許有空格和制表符,所以下面兩個例子功能相同:
<?php
$foo = (int) $bar;
$foo = ( int ) $bar;
?>
將字符串文字和變量轉(zhuǎn)換為二進制字符串:
<?php
$binary = (binary)$string;
$binary = b"binary string";
?>
注意:
可以將變量放置在雙引號中的方式來代替將變量轉(zhuǎn)換成字符串:
<?php
$foo = 10; // $foo 是一個整數(shù)
$str = "$foo"; // $str 是一個字符串
$fst = (string) $foo; // $fst 也是一個字符串
// 輸出 "they are the same"
if ($fst === $str) {
echo "they are the same";
}
?>
有時在類型之間強制轉(zhuǎn)換時確切地會發(fā)生什么可能不是很明顯。更多信息見如下小節(jié):