PHP 8.0 меняет принцип работы свободного сравнения

Давайте иметь простой скрипт PHP

      <?php
var_dump("php" == 0);

Согласно официальной документации ( https://www.php.net/manual/en/types.comparisons.php ), этот shoud превращается в true

НО Это так, для PHP <=7.4, но не для PHP 8.0.

В текущей версии PHP 8 (8.0.0 - 8.0.2) он превращается в false.

Существуют ли какие-либо недокументированные изменения этой функции или это ошибка? Или я что-то упускаю?

Спасибо

4 ответа

Когда был выпущен PHP 8, они также разместили объявление о выпуске на веб-сайте. Это часть одного из новых основных изменений - более разумного сравнения строк с числами .

Цитировать:

При сравнении с числовой строкой PHP 8 использует сравнение чисел. В противном случае он преобразует число в строку и использует сравнение строк.

Сопровождающий документации PHP здесь, PHP 8 изменил семантику, и это показано в руководстве по миграции. Однако другие части документации все еще отстают, поскольку у нас нет людских ресурсов / времени для редактирования и документирования всех изменений, связанных с PHP 8.

Так что это не ошибка, а скорее факт, что текущая страница манипулирования типами устарела в отношении PHP 8.0.

Это поведение описано в разделе «Изменения, несовместимые с предыдущими версиями» .

Сравнение строк с числами

Нестрогие сравнения чисел и нечисловых строк теперь работают путем преобразования числа в строку и сравнения строк. Сравнение чисел и числовых строк продолжает работать, как и раньше. Примечательно, что это означает, что 0 == "не-число" теперь считается ложным.

Как видно на изображении ниже, это false

Официальная документация

Другие вопросы по тегам