我发现了这种奇怪的行为:
$a = $b + $c;
echo $a; //prints 0
打印 0,而这:
$a = $b;
echo $a; //doesn't print anything
不打印任何内容。
它是否能够以有意义的方式解释?
这是类型杂耍的副作用。未定义的变量$b
和$c
等效于null
。在 PHP 中,$a = null + null
等同于 $a = (int) null + (int) null
与 $a = 0 + 0
相同。这就是$a
等于 0 的原因。
因此,$a = $b
与$a = null
相同,因此当您echo $a
时,不会打印任何内容。
这是一个不错的参考,可以解释类型杂耍 - http://php.net/manual/en/language.types.type-juggling.php
在一个上下文($a = $b + $c
)中,由于+
运算符,它们被转换为数字,这同样适用于所有数学运算符:+, *, -, /
。
在另一个中,它只是一个空变量(未定义的变量设置为 NULL),被 echo
强制转换为字符串。
见 http://php.net/manual/en/language.types.type-juggling.php
echo "Cast to int becomes: " . (integer) NULL; // 0
echo "Cast to string becomes" . (string) NULL; // (Empty string)
类型转换。PHP 尝试猜测上下文中最合适的变量类型,并相应地转换值。
<?php
$a = null;
$b = null;
var_dump($a . $b); // string(0) ""
var_dump($a + $b); // 0
var_dump($a / $b); // float(NAN), also warns about Division by zero
var_dump($a - $b); // 0
var_dump($a * $b); // 0
这也是为什么你可以做到:
echo "8 beers" + 5; // 13