Путаница PHP-типа

У меня есть следующий код:

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