У меня ужасно сбивает меня с толку проблема. Я заметил это раньше, но не обращал на это внимания до сегодняшнего дня.
Я пытался написать собственный чек на целочисленные строки. Я знаю о 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 Ниже приведено несколько правильных ответов на этот вопрос. Спасибо всем, кто ответил.