Приведение типов и сравнение с свободным оператором «==»

У меня ужасно сбивает меня с толку проблема. Я заметил это раньше, но не обращал на это внимания до сегодняшнего дня. Я пытался написать собственный чек на целочисленные строки. Я знаю о is_numeric () , но этого недостаточно, поскольку он считает float числовыми, а не только целыми числами и is_int () , что делает не работают со строковыми числами.

Я сделал что-то похожее на это


$var1 = 'string';
$var2 = '123'; 

var_dump( (int)$var1 == $var1);// boolean true 
var_dump((int)$var2 == $var2);// boolean true

 var_dump((int)$var1);//int 0
 var_dump($var1);//string 'string' (length=6)

Как и ожидалось, второй дамп var выдает истину, поскольку я ожидаю, что при слабом сравнении php строковая и целочисленная версии будут равны.

Однако с первым Я не понимаю, почему это так. Я попытался выполнить приведение к bool , и это по-прежнему дает мне тот же результат.

Я попытался назначить приведенную переменную новой переменной и сравнить их, но результат тот же

Это что-то Я делаю неправильно или это ошибка php?

*** Примечание Я здесь не сравниваю типы. На самом деле я пытаюсь воспользоваться тем фактом, что int 0 не равно string 'string' .

Я написал целочисленную проверку по-другому, поэтому мне не нужны альтернативы для этого.

*** Править Я провел дополнительную проверку, и оказалось, что 0 == 'string' тоже верно. Как такое возможно?

*** Редактировать 2 Ниже приведено несколько правильных ответов на этот вопрос. Спасибо всем, кто ответил.

7
задан frostymarvelous 27 January 2017 в 09:49
поделиться