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