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

时间:2016-01-28 16:31:00

标签: php

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

$a = $b + $c;
echo $a; //prints 0

在此时打印0:

$a = $b;
echo $a; //doesn't print anything  

不打印任何内容 是否可以用有意义的方式解释?

3 个答案:

答案 0 :(得分:3)

这是类型杂耍的副作用。未定义的变量$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

答案 1 :(得分:2)

在一个上下文( System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (Unauthorized). ... other exceptions here ---------- Restore failed )中,由于$a = $b + $c运算符,它们被转换为数字,并且所有数学运算符都适用:+

另一方面,它只是一个空变量(未定义的变量设置为NULL)被+, *, -, /强制转换为字符串。

请参阅http://php.net/manual/en/language.types.type-juggling.php

echo

答案 2 :(得分:0)

输入类型。 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