PHP: почему 1 + 2 не равно 3 или Warning: A non-numeric value encountered
Запустим на локальном или удалённом сервере вот такой небольшой скрипт.
<?php $a = 1; $b = 2; echo "Сумма=" . $a + $b; ?>
Вроде бы, мы вправе рассчитывать, что получим 1 + 2 = 3. Но не тут-то было.
В версии PHP 5.2 видим вывод:
2
В версии PHP 7.3.10 имеем в браузере:
Warning: A non-numeric value encountered in ... on line 4 2
Как видно из таблицы приоритетов,
на момент написания заметки приоритеты у "+", "-"и "." одинаковы,
а ассоциативность - левая, так что получаем
("Сумма=" . $a) + $b = 0 + 2 = 2
А предупреждение связано с тем, что в PHP8 это будет интерпретировано как
"Сумма=" . ($a + $b)
и получится строка "Сумма=3
".
Разумеется, и сейчас надёжнее написать
echo "Сумма=" . ($a + $b);
, чтобы получить правильный результат.
Просто с некоторых пор PHP ругается при обнаружении выражения, содержащего "." перед "+ " или "-" и не окружённого при этом скобками.
Сегодня правил в нескольких местах кода нечто вроде
$s .= '' + $n;
на
$s .= $n;
- видимо, не хотел человек прицеплять к строке число и заботливо пытался сделать его сначала строкой :)
Есть и другие изменения, в принципе, некоторые из них даже задокументированы :)
11.02.2020, 19:47 [3526 просмотров]