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 == "не-число" теперь считается ложным.