PHP在变量定义中不需要(或不支持)明确的类型定义;变量类型是根据使用该变量的上下文所决定的。也就是说,
如果把一个字符串值赋给变量var,var就成了一个字符串。如果又把一个整数值赋给var,那它就成了一个整数。
PHP的自动类型转换的一个例子是加号“+”.如果任何一个操作数是浮点数,结果也是浮点数。否则操作数会被浮点数,结果也是浮点数。
否则操作数会被解释为整数,结果也是整数。注意这并没有改变这些操作数本身的类型;改变的仅是这些操作数如何被求值以及表达式
本身的类型。
<?php
$foo="0";//$foo 是字符串(ASCII 48)
$foo+=2;//$foo现在是一个整数(2)
$foo=$foo+1.3;//$foo 现在是一个浮点数(3.3)
$foo=5+"10 Little Piggies";//$foo 是整数(15)
$foo=5+"10 Small Pigs";
?>
如果上面两个例子看上去古怪的话,参见字符串转换为数值.
如果要强制将一个变量当作某种类型来求值,参见类型强制转换一节.如果要改变一个变量的类型,参见settype().
如果想要测试本节中任何例子的话,可以用var_dump()函数.
Note:
自动转换为数组的行为目前没有定义.
Also,because PHP supports indexing into strings via offsets using the same syntax as array indexing,the following
example holds true for all PHP versions:
<?php
$a='car';//$a is a string
$a[0]='b';
echo $a;
?>
请参阅访问和修改字符串中的字符一节以获取更多信息.
类型强制转换
PHP中的类型强制转换和C中的非常像;在要转换的变量之前加上用括号括起来的目标类型.
<?php
$foo=10;
$bar=(boolean) $foo;
?>
d
允许的强制转换有:
.(int),(integer)-转换为整型(integer)
.(bool),(boolean)-转换为布尔型(boolean)
.(float),(double),(real)-转换为浮点型(float)
.(string)-转换为字符串(string)
.(binary)-转换为二进制字符串(string)(PHP 6)
.(array)-转换为数组(array)
.(object)-转换为对象(object)
.(unset)-转换为NULL(PHP 5)
(binary)转换会在结果前面加上前缀'b',PHP 5.2.1新增.
注意在括号内允许有空格和制表符,所以下面有两个例子功能相同:
<?php
$foo=(int) $bar;
$foo=(int) $bar;
?>
将字符串(string)文字和变量转换为二进制字符串(string):
<?php
$binary=(binary)$string;
$binary=b"binary string";
?>
Note:
可以将变量放置在双引号的方式来代替将变量转换为字符串(string)s:
<?php
$foo=10;
$str="$foo";
$fst=(string)$foo;
//输出"they are the same"
if($fst==$str){
echo "they are the same";
}
?>
有时在类型之间强制转换时确切地会发生什么可能不是很明显.更多信息如下小节: