@TechnicalMan94

Почему PHP так сравнивает строку и число?

Какая-то мистика
У меня на сервере выполнение кода
$param = "Любой текст";
var_dump($param == (int)$param);

Всегда возвращает true
Это как-то связано с версией PHP ? Потому что на PHP 8 возвращает false, а 7.3 и 7.4 возвращает true
Как можно в php 7.4 получить false? Сравнивать нужно именно так, с двойным ==
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
PHP 8.0
If both operands are numeric strings, or one operand is a number and the other one is a numeric string, then the comparison is done numerically.

Более ранние версии PHP:
If a string is compared to a number or a numeric string then the string was converted to a number before performing the comparison.

То есть, когда вы в 7.4 сравниваете строку с числом, то строка в любом случае приводится к числу. В 8.0, при сравнении нечисловой строки с числом, число будет приведено к строке.
А дальше у вас, похоже, проблема XY. Вам надо искать не "как сравнить через ==", а как решить исходную задачу, для которой нужно такое сравнение.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Sleep
Так происходит, т.к. вы используете операторы нестрогого сравнения, это означает, что перед сравнением php будет пытаться привести параметры к одному типу.
Используйте строгое сравнение (===) и будет вам счастье
Ответ написан
@kalsc12345
Неизвестный человек.
$param = "Любой текст";
var_dump($param == (string)(int)$param && $param !== "0");


А если так попробовать?
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы