的值$a
是true
$b = true;
$c = 0;
$a = ($a ? ($a ? $b : $c) : ($c ? $a : $b));
速记可以这样解释:
if($a) {
if($a) {
$a = $b;
} else {
$a = $c;
}
} else {
if($c) {
$a = $a;
} else {
$a = $b;
}
}
因为$a
一开始就不存在是假的,所以它立即跳转到 else 语句。所以对你来说唯一重要的部分是:
if($c) {
$a = $a;
} else {
$a = $b;
}
0
与 相同false
,因此$c
将返回为假,因此$a
等于$b
,即true
。
编辑:
关于抛出的通知有一些讨论,但这并不能说明通知并不是真正的错误,因此不会中断代码。结果不是Notice: Undefined variable: a
,“结果”(认为这些人的意思是输出)如果不是我们$a
用var_dump
. 问题是关于$a
变成什么的价值,而不是屏幕上显示的内容。
屏幕上显示的与未设置变量有关的内容与实际值无关$a
。
如果执行以下代码,通知并不是唯一实现的:
$b = true;
$c = 0;
$a = ($a ? ($a ? $b : $c) : ($c ? $a : $b));
var_dump($a);
所以输出是:
E_NOTICE : type 8 -- Undefined variable: a -- at line 5
bool(true)
发出通知的事实并不妨碍$a
成为真实。
通知也很容易被压制......
error_reporting(0);
$b = true;
$c = 0;
$a = ($a ? ($a ? $b : $c) : ($c ? $a : $b));
var_dump($a);
将导致$a
仍然变为真实,并且没有看到通知。
bool(true)