PHP 在变量定义中不需要(或不支持)明示的类型定义;变量类型是根据使用该变量的上下文所决定的。也就是说,如果你把一个字符串值赋给变量 var,var 就成了一个字符串。如果你又把一个整型值赋给 var,那它就成了一个整数。
PHP 的自动类型转换的一个例子是加号“+”。如果任何一个运算数是浮点数,则所有的运算数都被当成浮点数,结果也是浮点数。否则运算数会被解释为整数,结果也是整数。注意这并没有改变这些运算数本身的类型;改变的仅是这些运算数如何被求值。
<?php |
如果上面两个例子看上去古怪的话,参见字符串转换为数值。
如果你要强制将一个变量当作某种类型来求值,参见类型强制转换一节。如果你要改变一个变量的类型,参见 settype()。
如果你想要测试本节中任何例子的话,可以用 var_dump() 函数。
注: 数组的自动转换行为目前没有定义。
由于一些历史原因,PHP 支持通过偏移量进行的字符串索引,这和数组索引的语法一样。以上的例子就产生了一个问题:$a 应该变成一个第一个元素是“f”的数组呢,还是“f”成了字符串 $a 的第一个字符?
目前版本的 PHP 将以上第二个赋值理解成字符串的偏移量标识,即 $a 变成了 "f",尽管如此,这种自动转换的地结果应该被认为未定义。PHP 4 引入了新的花括号语法来访问字符串的字符,请使用该语法来替代以上的操作:
请参阅题为“用字符访问字符串”的章节以获取更多信息。
PHP 中的类型强制转换和 C 中的非常像:在要转换的变量之前加上用括号括起来的目标类型。
允许的强制转换有:
(int), (integer) - 转换成整型
(bool), (boolean) - 转换成布尔型
(float), (double), (real) - 转换成浮点型
(string) - 转换成字符串
(array) - 转换成数组
(object) - 转换成对象
注意在括号内允许有空格和制表符,所以下面两个例子功能相同:
注: 为了将一个变量还原为字符串,您还可以将变量放置在双引号种。
当在某些类型之间强制转换时确切地会发生什么可能不是很明显。更多信息见如下小节: