类型转换

PHP中不需要(也不支持)在变量定义时做显式的类型声明;一个变量的类型取决于它的值的类型。也就是说,如果你给变量var 赋了一个字符串值,var 就成为字符串变量。如果你又赋了一个整型值给var, 它就变成了一个整型变量。

一个PHP自动类型转换的例子是加法操作符 '+'。如果任何一个操作数是double型,则所有的操作数按 double类型来计算, 结果也是double型的。否则,所有的操作数按integer类型来计算, 结果也是integer型的。注意:操作数本身的类型不发生变化;类型变换仅在计算时做。

$foo = "0";  // $foo is a string (ASCII 48)
$foo++;      // $foo is the string "1" (ASCII 49)
$foo += 1;   // $foo is now an integer (2)
$foo = $foo + 1.3;  // $foo is now a double (3.3)
$foo = 5 + "10 Little Piggies";    // $foo is a double (15)
$foo = 5 + "10 Small Pigs";   // $foo is an integer (15)
     

如果觉得上面的两个例子,请看字符串转换.

如果你要强行指定一个变量作为特定类型进行计算,请看 Type casting 部分。要改变变量的类型,请看settype() 函数。

测试变量类型

因为PHP根据需要检测变量类型及进行类型转换,所以一个给定变量的类型不是一成不变的。PHP包含一系列 类型检测函数: gettype(), is_long(), is_double(),is_string(),is_array(),及is_object()

强制类型转换

PHP中的强制类型转换和C中一样: 在需要进行类型强制转换的变量前的括号中写出想要的类型名。

$foo = 10;   // $foo is an integer
$bar = (double) $foo;   // $bar is a double
      

允许的强制转换是:

注意:括号中可以含有tab或空格,下面的函数将被计算:

$foo = (int) $bar;
$foo = ( int ) $bar;
     

字符串转换

当字符串作为数值类型计算时,结果的值和类型按以下方式决定。

如果字符串中包含任何'.', 'e',及'E'字符,则被作为double类型计算。否则,就作为integer类型计算。

该值从字符串最开始算起。如果字符串是合法的数字,则使用该值,否则值为 0 。合法的数字是一个符号位(可选),后跟一位或几位数字(也可含有一个十进制的小数点), 后跟一位可选的指数。指数是一个 'e' 或 'E'后跟一个或几个数字。

$foo = 1 + "10.5";      // $foo is a double (11.5)
$foo = 1 + "-1.3e3";    // $foo is a double (-1299)
$foo = 1 + "bob-1.3e3"; // $foo is a double (1)
$foo = 1 + "bob3";      // $foo is an integer (1)
$foo = 1 + "10 Small Pigs";     // $foo is an integer (11)
$foo = 1 + "10 Little Piggies"; // $foo is a double (11); the string contains 'e'
      

要获得更多关于转换的信息,请看Unix man页里的strtod(3)。