为什么使用未设置的变量回显表达式会打印 0


Why echoing an expression with unset variables prints 0?

我发现了这种奇怪的行为:

$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