$a = 5;$b = 10;echo ($a) ? ($a == 5) ? 'yay' : 'nay' : ($b == 10) ? 'excessive' : ':(';
不懂結果為什麼是 "excessive" ? 求知道的朋友解答下
回複內容:
$a = 5;$b = 10;echo ($a) ? ($a == 5) ? 'yay' : 'nay' : ($b == 10) ? 'excessive' : ':(';
不懂結果為什麼是 "excessive" ? 求知道的朋友解答下
通過修改數值,結合結果來分析吧
//#1 excessive$a = 5;$b = 10;echo ($a) ? ($a == 5) ? 1 : 0 : ($b == 10) ? 'excessive' : ':('; //#2 :($a = 3;$b = 10;echo ($a) ? ($a == 5) ? 1 : 0 : ($b == 10) ? 'excessive' : ':('; //#3 excessive$a = 0;$b = 10;echo ($a) ? ($a == 5) ? 1 : 0 : ($b == 10) ? 'excessive' : ':('; //#4 :($a = 0;$b = 9;echo ($a) ? ($a == 5) ? 1 : 0 : ($b == 10) ? 'excessive' : ':(';
可以看出$a為真時 執行($a == 5) ? 1 : 0 為假時執行 $b == 10
這個結果為真時返回excessive,為假時返回:(
為了方便閱讀最好在($a == 5) ? 1 : 0 上加個括弧
我只能說 js 跑出來是 yay
難道 PHP 是這樣執行的?
($a ? ($a == 5 ? "yay" : "nay") : $b == 10) ? "excessive" : ":(";
如果是自己寫代碼,還是加括弧分組看起來方便些,比如下面這個應該是和 javascript 一樣的結果。
echo $a ? ($a == 5 ? "yay" : "nay") : ($b == 10 ? "excessive" : ":(");
如果我猜的沒錯的話,要從後面往前面看,劃分語句。
通過劃分可以簡化成
echo 'yay' ? 'excessive' : ':(';
這樣結果就會變掉
$a == 5 是真 返回yay
($a) ? ($a == 5) ? 'yay' : 'nay' : ($b == 10) ? 'excessive' : ':('; 這種寫法你是從左往右讀的,但機器不這麼讀,它可能是這樣讀的 ($a) ? (($a == 5) ? 'yay' : 'nay' : ($b == 10) ? 'excessive') : ':('; 電腦頭都暈了
$a ? ($a == 5 ? 'yay' : 'nay') : ($b == 10 ? 'excessive' : ':('); 以後這樣寫,好嗎
在語言設計上,js重輸出,而php重計算。
類似的差別還有&&符和||符的計算結果、null變成字串後的結果等。