一道三目運算子問題

來源:互聯網
上載者:User
$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變成字串後的結果等。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.