Почему это происходит ?
<?php $result = true ; if($result == 'SOME TEXT') echo 'why is this true? why is this printed?'; else echo 'when this should be printed?' ?>
Пожалуйста, объясните, я не ищу альтернативный метод.
В вашем выражении вы сравниваете логическое значение со строкой. Строка привязана к true
.
Ссылка: http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting
Как указано выше, используйте ===
для сравнения значения и типа.
Потому что вы используете ==
operator вместо ===
. В вашем случае ==
не полагается на тип операндов, а не ===
Это из-за автоматического преобразования типа PHP; и поскольку вы не сравниваете по типу (===), он считается TRUE. Вот список того, что считается пустым, но также считается FALSE:
Следующие вещи считаются пустыми:
"" (пустая строка)
0 (0 как целое число)
0.0 (0 в качестве поплавка)
«0» (0 в виде строки)
НОЛЬ
ЛОЖНЫЙ
array () (пустой массив)
$ Var; (объявленная переменная, но без значения)
Все остальное в основном считается ИСТИННЫМ.
Я взглянул на документацию оператора php.
В вашем случае вы говорите с ==
что логическое значение «true» равно текстовому значению «НЕКОТОРЫЙ ТЕКСТ», но не относится к одному типу данных. PHP возвращает true в этом случае, потому что если вы считаете, что они похожи, если вы игнорируете тип данных.
Если вы использовали ===
тогда он рассмотрит тип данных и, следовательно, произведет значение false.
Поскольку вы сравниваете логическое значение со строкой, строка будет автоматически преобразована в логическую.
Согласно PHP-документации, любая строка, которая не является null
или empty
(или нулевой), будет преобразована в True.
Итак, ваше сравнение похоже на True ==
True.
Если вы используете оператор ===
, вы также проверяете, что оба значения одного типа.
http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting