2013-03-17 9 views
2

Почему это happen?PHP, если условие с булевым

<?php $result = true ; 
    if($result == 'SOME TEXT') 
     echo 'why is this true? why is this printed?';   
    else 
     echo 'when this should be printed?' 
?> 

Пожалуйста, объясните, я не ищу альтернативный метод.

+1

http://google.com/search?q=php+type+juggling конечно дубликат –

+0

Masters !!! просто причина, я не мог найти старый вопрос, это означает, что -1 уверен! , Я нашел это интересным и спросил. –

ответ

4

В вашем выражении вы сравниваете логическое значение со строкой. Строка принуждается к true.

Ссылка: http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting

Как уже говорилось ранее, использовать === для сравнения как значение и тип.

+0

Ну, я считаю, что это идиотский, но так оно и есть, так что давайте теперь будем обходиться с ним. –

+0

Ваш штраф, цель узнать что-то в каждый раз, когда вы посещаете SO! –

+0

Конечно, я в порядке: D. Просто я нашел логику, лежащую в ее основе, идиотской: P. В любом случае, спасибо. –

1

Поскольку вы используете оператор == вместо ===. В вашем случае == не полагается на тип операнда, а не ===

+1

Подробнее о режиме - см. Http://www.php.net/manual/en/language.operators.comparison.php – Laimoncijus

+0

, поэтому «некоторый текст» равен true? вот как я могу это интерпретировать? –

+0

, если мы пренебрегаем типом i.e.btw Я действительно знаю о === не очень убедительном ответе. –

0

Это из-за преобразования типа автоматического преобразования PHP; и поскольку вы не сравниваете по типу (===), он считается TRUE. Here список того, что считается пустым, но это также считается ЛОЖЬ:

следующие вещи считаются пустыми:

«» (пустая строка)

0 (0 в целое число)

0.0 (0 как поплавок)

"0" (0 в виде строки)

NULL

FALSE

массив() (пустой массив)

$ вар; (переменная объявлена, но без значения)

Все остальное в основном считается ИСТИННЫМ.

+0

Wow, 2 downvotes! – Shomz

+0

Немного суровый ИМО –

+0

Иногда я спрашиваю себя, почему я даже беспокоюсь ... – Shomz

0

Я посмотрел на документацию оператора PHP ..

В вашем случае, вы говорите с ==, что логическое значение «истина», равно текстовое значение «Some Text», но НЕ одного и того же типа данных. PHP возвращает true в этом случае, потому что если вы считаете, что они похожи, если вы игнорируете тип данных.

Если вы использовали ===, тогда он рассмотрит тип данных и, следовательно, произведет значение false.

+0

http://www.w3schools.com/php/php_operators.asp – ecirp

+0

[w3fools] (http://w3fools.com) - распространять слово. – Shomz

0

Поскольку вы сравниваете логическое значение со строкой, строка будет автоматически преобразована в булево.

Согласно документации PHP, любая строка, которая не является null или empty (или ноль), будет преобразована в значение True.

Итак, ваше сравнение похоже на True == Правда.

Если вы используете оператор ===, вы также проверяете, что оба значения одного типа.

http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting

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