的$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