的$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
是摆在首位不存在虚假,它会立即跳转到其他语句。这样对你很重要的唯一的部分是:
if($c) {
$a = $a;
} else {
$a = $b;
}
0
相同false
,所以$c
会回来为假,因此$a
等于$b
,这是true
。
编辑:
有上时引发该通知的一些讨论,但这个无法说清的事实,声明并非真正的错误,因为这是没有中断的代码。结果不是Notice: Undefined variable: a
,“结果”(认为这些人的意思是输出)应该是空白的,如果它不是我们在var_dump
末尾确定$a
的值。 问题是$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)
这里什么是您的问题 – Gopalakrishnan
结果是'注意:未定义的变量:A' – RiggsFolly
是因为你还没有宣布$ a的值,你在速记条件下使用之前。 – Gopalakrishnan