引用官方的解释
PHP 在变量定义中不需要(或不支持)明确的类型定义;变量类型是根据使用该变量的上下文所决定的。也就是说,如果把一个 string 值赋给变量$var,$var 就成了一个 string。如果又把一个integer 赋给 $var,那它就成了一个integer。
PHP 的自动类型转换的一个例子是乘法运算符“*”。如果任何一个操作数是float,则所有的操作数都被当成float,结果也是float。否则操作数会被解释为integer,结果也是integer。注意这并没有改变这些操作数本身的类型;改变的仅是这些操作数如何被求值以及表达式本身的类型。
<?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) ?>
除此之外,我们可以通过显示转换(类型强转换)的办法将一个变量当作某种类型
PHP 中的类型强制转换和 C 中的非常像:在要转换的变量之前加上用括号括起来的目标类型。
<?php $foo = 10; // $foo is an integer $bar = (boolean) $foo; // $bar is a boolean ?>
允许的强制转换有:
- (int), (integer) - 转换为整形 integer
- (bool), (boolean) - 转换为布尔类型 boolean
- (float), (double), (real) - 转换为浮点型 float
- (string) - 转换为字符串 string
- (array) - 转换为数组 array
- (object) - 转换为对象 object
- (unset) - 转换为 NULL (PHP 5)
class test { public $var1 = 1; protected $var2 = 2; private $var3 = 3; static $var4 = 4; public function toArray(){ return (array)$this; } } $t = new test; print_r($t->toArray());
* PHP不自带toArray函数,需要自己实现,对象强转数组后会将内部所有数值型属性都打印出来,方法和静态属性会被丢弃
上例输出:
Array ( [var1] => 1 [*var2] => 2 [testvar3] => 3 )