Глюк в PHP

horpah

Гуру форума
Регистрация
20 Июн 2010
Сообщения
199
Реакции
55
Собственно сабж:
PHP:
$z='ddd';
$x=(int) $z;
echo $z.'<br>'; //ddd
echo $x.'<br>'; // 0


if($x==$z){
   echo 'fuck'; // оказывается они равны :)
}

Это фишка или глюк? Версия 5.2.13 под win32
 
при сравнении интерпритатор php автоматом преобразует обе переменные к одному типу.

тройное равно попробуй

PHP:
<?
$z='ddd'; 
$x=(int) $z; 
echo $z.'<br>'; //ddd 
echo $x.'<br>'; // 0 


if($x===$z){ 
   echo 'fuck'; // оказывается они равны :) 
} else echo 'fig vam :)';

?>
 
PHP:
if ('ddd' == 0) echo "true";   // и даже так работает!
 
PHP:
if ('aaa' == true) echo 1;
if ('aaa' == 0) echo 2;
if (0 == false) echo 3;
Это не глюк, а приведение типов.
Когда происходит что-то типа parseInt('aaa') - тогда и получается ноль, и сравнение с другим нулем дает, соответственно, true.

А вот почему при сравнивании int и boolean оно приводит все к boolean, а не к int - я лично не понимаю.

От порядка аргументов не зависит.

Есть что ли какой-то приоритет типов?
 
возможно всё автоматом приводится к наименее обширному типу

а может быть при сравнении оно ещё сравнивает типы после автоматического их преобразования в один :)

типа одно булеан и другое булеан и в этом они равны, вот вам и true

я когда то давно пол часа кампасировал себе и гуглу мозг, не мог понять почему скрипт не работает. С тех пор везде где это уместно использую только === :D

=== - равное и по типу и по значению
 
На 5.3 вроде все ок! Даже при == !!!!
 
Назад
Сверху