2013-04-25 2 views
-1

Я просто работал над некоторой работой закрутки, пока не натолкнулся на интересное заявление. Думаю, что это никогда не выполнит утверждение if, к моему удивлению, это так. Как это выполняется?Как это сделать, если триггер состояния?

<?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

+2

http: //php.net/manual/en/language.operators.precedence.php '==' имеет более высокий приоритет, чем '&&', поэтому это эффективно 'while (6 && true)', что всегда верно. –

+0

Вы посмотрели на [приоритет оператора] (http://php.net/manual/en/language.operators.precedence.php)? (Да, ваша догадка правильная: '6 && 2 == 2' ==' 6 && (2 == 2) '==' 6 && true' == 'truey && true' ==' true'. – Wrikken

ответ

2

Вы правы. Порядок, в котором выполняются подзапросы (6, & &, 2, ==, 2), см. http://php.net/manual/en/language.operators.precedence.php.

Оценка: (6) && ((2) == (2)). 6, литой в boolean. И 2 == 2 тоже. Что приводит к true && true, что естественно true.

+0

Спасибо, извините, что я забыл проверить одинаковые вопросы, мне просто нужен прямой ответ на мой вопрос пример. Спасибо, agian. Отметьте это как можно скорее, как только я вернусь из магазинов и куплю поздравительную открытку. –

1

Исправить. Ваше выражение имеет две части 6 и 2 == 2. Оба истины так истинны. & & Правда, конечно, так. Посмотрите на operator precedence.

1

У меня нет опыта работы на PHP, но я сделаю снимок. При выполнении логических сравнений возвращается возвращаемое значение в зависимости от значений с каждой стороны. В C++, например, у вас есть два возможных результата сравнения: 0 и 1. 0 будет означать «false», а 1 и любое другое число означает «true». Поэтому в вашем коде вы получаете значение, равное 6 (что не равно 0, так верно) и значение, равное 1 (потому что 2 равно 2).

Смежные вопросы