類型轉換的判別

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 "10 Little Piggies"// $foo 是整數 (50)
$foo "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
?>

允許的強制轉換有:

  • (int), (integer) - 轉換為整形 int
  • (bool), (boolean) - 轉換為布爾類型 bool
  • (float), (double), (real) - 轉換為浮點型 float
  • (string) - 轉換為字符串 string
  • (array) - 轉換為數組 array
  • (object) - 轉換為對象 object
  • (unset) - 轉換為 NULL

向前兼容 (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é):