Я очень смущен, потому что PHP принимает следующее условие.
<?php
$b = true;
if($b == 'anything')
echo 'ok';
else
echo 'no';
?>
Ну, PHP отображает ok
, Я до сих пор не понимаю, как это возможно.
Может быть, вы можете уточнить это для меня.
это должно работать для вас
$b = true;
if($b === 'hello')
echo 'ok';
else
echo 'no';
когда используешь ==
php только проверяет, равны ли значения, без сравнения типов значений, когда первое значение является bool, php преобразует обе стороны в bool, преобразуя любую строку, кроме пустой ''
и строка '0'
вернусь true
вот почему вы должны использовать ===
следить за этим ссылка на сайт понять сравнение в php
Php не является строго типизированным языком, поэтому значение во второй половине оператора IF считается значением Truthy. Если вы хотите жаловаться и на типы, используйте сравнение «===». Взгляните на правдивую таблицу на этой странице. http://php.net/manual/en/types.comparisons.php
Согласно инструкции PHP по операторам сравнения (http://php.net/manual/en/language.operators.comparison.php) ==
проверяет «равенство», тогда как ===
проверяет личность (что практически означает, что он того же ТИПА и того же ЗНАЧЕНИЯ).
При сравнении (для равенства) bool
и string
, string
приведен к bool
, Согласно документы:
При преобразовании в логическое значение следующие значения считаются ЛОЖНЫМИ: * само логическое ЛОЖЬ * целое число 0 (ноль) * Поплавок 0,0 (ноль) * пустая строка, а строка "0" * массив с нулевыми элементами
так что ваша строка 'anything'
становится true
,