БлогNot. PHP: почему 1 + 2 не равно 3 или Warning: A non-numeric value encountered

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;

- видимо, не хотел человек прицеплять к строке число и заботливо пытался сделать его сначала строкой :)

Есть и другие изменения, в принципе, некоторые из них даже задокументированы :)


теги: php ошибка памятка

11.02.2020, 19:47; рейтинг: 69