У меня есть проблема, ужасно сбивающая меня с толку.Я заметил это раньше, но до сегодняшнего дня не обращал на это внимания.Я пытался написать свою собственную проверку для целочисленных строк.Я знаю о is_numeric()
, но этого недостаточно, поскольку он считает float
числовым не только integers
и 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 выдает true, так как я ожидаю, что при произвольном сравнении php строки и целочисленные версии будут равны.
Однако с первой я не понимаю, почему это так.так.Я попытался привести к bool
, и он все еще дает мне тот же результат.
Я попытался присвоить приведение var новой переменной и сравнить два, все тот же результат
Isэто что-то я делаю неправильно или это ошибка php?
*** Заметьте, я не сравниваю типы здесь.Я на самом деле пытаюсь воспользоваться тем, что int 0
не равно string 'string'
.
Я написал свою целочисленную проверку по-другому, поэтому мне не нужны альтернативы для этого.
*** Edit Я провел дополнительную проверку, и оказалось, что 0 == 'string'
также верно,Как это возможно?
*** Редактировать 2 Ниже приведено несколько правильных ответов на вопрос.Спасибо всем, кто ответил.