2013-04-25 58 views
-1

我只是在做一些捲曲工作,直到我遇到了一個有趣的if語句。認爲它永遠不會執行if語句,令我驚訝的是它。這是如何執行的?如果statment觸發器如何?

<?php  
    while (6 && 2 == 2) { 

    $test = "How the hell?!!?"; 

} 
?> 

我能想到它的工作原理的唯一原因是6評估爲真,2等於2這是真的。我在這個想法中糾正了嗎?本來我認爲它不能執行,因爲6顯然不等於2.

+0

[參考 - 這個符號在PHP中意味着什麼?](http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php) – Kermit 2013-04-25 17:54:15

+2

http: //php.net/manual/en/language.operators.precedence.php'=='具有比'&&'更高的優先級,所以這實際上是'while(6 && true)',這總是正確的。 – 2013-04-25 17:54:48

+0

你看過[運算符優先級](http://php.net/manual/en/language.operators.precedence.php)嗎? (是的,你的猜測是正確的:'6 && 2 == 2' =='6 &&(2 == 2)'=='6 && true' =='truthy && true' =='true'。 – Wrikken 2013-04-25 17:56:03

回答

2

你是對的。有關子語句(6,& &,2,==,2)的執行順序,請參閱http://php.net/manual/en/language.operators.precedence.php

因此評估爲(6) && ((2) == (2))6,轉換爲布爾值爲true。還有2 == 2true && true什麼結果自然是true

+0

謝謝,對不起,我忘了檢查相同的問題,我只是想直接回答我的問題例。謝謝你。只要我從商店回來購買生日卡,我會立即將其標記爲正確。 – 2013-04-25 18:03:35

1

正確。你的表情有兩個部分6和2 == 2。兩者都是如此的真實& &當然是對的。看看operator precedence

1

我對PHP沒有任何經驗,但我會拍攝。 當進行邏輯比較時,將會有一個返回值,具體取決於每邊的值。例如,在C++中,您有兩種可能的比較結果:0和1. 0代表'false',而1代表任何其他數字代表'true'。因此,在你的代碼中,你得到的值是6(這不是0,所以是真的),值是1(因爲2等於2)。