Ответ
В PHP не возникнет ошибки (исключения) в классическом понимании. Вместо этого интерпретатор попытается выполнить неявное приведение типов (type juggling).
Правила преобразования:
- Если строка начинается с допустимого числового значения (включая научную нотацию, например,
"12e3"), она будет преобразована в это число. - Если строка не начинается с числа, она преобразуется в
0(ноль). - Если строка является числовой, но содержит посторонние символы в конце, будет взято начальное числовое значение.
Примеры:
// Строка, начинающаяся с числа
var_dump(5 + "10"); // int(15)
var_dump(5 + "10.5abc"); // float(15.5) - берется начальное число 10.5
// Строка, не начинающаяся с числа
var_dump(5 + "abc10"); // int(5) - "abc10" -> 0
var_dump(5 + ""); // int(5) - пустая строка -> 0
// Строка с пробелами
var_dump(5 + " 42 "); // int(47) - пробелы игнорируются
Проблема и best practice: Такое поведение может привести к трудноуловимым багам. Для безопасных операций следует:
- Проверять типы данных перед операцией:
if (is_numeric($string)) { $result = $number + (float) $string; } - Использовать строгое сравнение (
===,!==), которое проверяет и значение, и тип. - Включать режим строгих типов
declare(strict_types=1);, который запретит неявное приведение для скалярных типов в объявленных функциях.