butteff
@butteff
Раз в тысячу лет заправляю свитер в носки

Почему такое возможно в php?

Есть код:
<?php
$check =0;
   if ( $check != 'close') {
    echo 'ok'; 
   }
?>


Запускаем - пусто
Меняем 0 на 8, например - видим ок!

Почему? ведь 0 != 'close'

Использование !== решает проблему. И мне подсказали, что надо смотреть таблицу сравнения типов, там мол видно, что вернет. Но почему так происходит при нуле? Не учить же мне эту таблицу и не использовать всегда !==
  • Вопрос задан
  • 2186 просмотров
Пригласить эксперта
Ответы на вопрос 4
zooks
@zooks
Frontend
Если вы сравниваете число со строкой или две строки, содержащие числа, каждая строка будет преобразована в число, и сравниваться они будут как числа.
php.net/manual/ru/language.operators.comparison.php

Что аналогично коду:
<?php
$check = 8;
   if ( $check != 0 ) {
    echo 'ok'; 
   }
?>

Поэтому выводится ok.
Ответ написан
Комментировать
Там ещё с 0 и false приколы свои есть.
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Просто запомните: несовпадение типов и когда начало строки не является числом при гибком (==) сравнении с 0 - это всегда True.
Т.е.:
'abc'==0 => true
'abc123'==0 => true

Однако:
'123abc'==0 => false
'123abc'==123 => true

'-123abc'==0 => false
'-123abc'==-123 => true

'-1.1abc'==0 => false
'-1.1abc'==-1.1 => true
Ответ написан
Комментировать
doublench21
@doublench21
В php любая строка, не являющаяся строковым представлением числа, преобразуется при сравнении с числом в 0. Отсюда и вышло так.
А вообще об этом хорошо написано у Котерова. Советую почитать. Библия php :)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы