如果statment触发器如何?

如果statment触发器如何?

问题描述:

我只是在做一些卷曲工作,直到我遇到了一个有趣的if语句。认为它永远不会执行if语句,令我惊讶的是它。这是如何执行的?如果statment触发器如何?

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

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

} 
?> 

我能想到它的工作原理的唯一原因是6评估为真,2等于2这是真的。我在这个想法中纠正了吗?本来我认为它不能执行,因为6显然不等于2.

+0

[参考 - 这个符号在PHP中意味着什么?](http://*.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

你是对的。有关子语句(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

正确。你的表情有两个部分6和2 == 2。两者都是如此的真实& &当然是对的。看看operator precedence

我对PHP没有任何经验,但我会拍摄。 当进行逻辑比较时,将会有一个返回值,具体取决于每边的值。例如,在C++中,您有两种可能的比较结果:0和1. 0代表'false',而1代表任何其他数字代表'true'。因此,在你的代码中,你得到的值是6(这不是0,所以是真的),值是1(因为2等于2)。