У меня есть следующий код:
<?php $val = 0; $res = $val == 'true'; var_dump($res); ?>
Я всегда был под впечатлением, что $ res должно быть «ложным», как в приведенном выше выражении. PHP попытается ввести буквенный тип $ val в boolean type (где нуль будет преобразован как false), а строка (непустая строка – true). Но если я выполню код выше, вы получите:
boolean true
Я что-то упускаю? Благодарю.
В PHP все непустые, нечисловые строки оцениваются равными нулю, поэтому 0 == 'true'
имеет значение TRUE, но 0 === 'true'
– FALSE. Строка true
не была добавлена к логическому значению, но сравнивается как строка с нулем. Нуль остается как значение int, а не как логическое. Так что в итоге вы получите:
// string 'true' casts to int 0 0 == 0 // true
Попробуй это:
echo intval('true'); // 0 echo intval('some arbitrary non-numeric string'); // 0
Просмотрите таблицу сравнения типов PHP . В общем, при выполнении булевых сравнений в PHP и типах не одно и то же (int string в этом случае), полезно использовать строгие сравнения.
Поскольку $val
является первым оператором PHP, он преобразует строку true
в целое число, которое становится 0. В результате 0 == 0 и ваш результат равен true;
Попробуй это
<?php $val = 1; $res = (bool)$val == 'true'; var_dump($res); ?>