Ответ
Основное изменение в PHP 7 — введение интерфейса Throwable, который стал базовым для всех бросаемых объектов. Это позволило создать отдельную иерархию Error для фатальных ошибок ядра (TypeError, ParseError, AssertionError и т.д.), которые в PHP 5 не могли быть перехвачены блоком try/catch.
Ключевые отличия:
-
Иерархия исключений:
- PHP 5: Все исключения наследуются от класса
Exception. - PHP 7: Появился интерфейс
Throwable. От него наследуются два основных класса:Exception(для исключений приложения) иError(для фатальных ошибок ядра).
- PHP 5: Все исключения наследуются от класса
-
Возможность перехвата ошибок: В PHP 7 критические ошибки, такие как передача аргумента неверного типа, теперь выбрасывают
TypeError, который можно перехватить.
Пример на PHP 7:
// В PHP 5 это вызвало бы фатальную ошибку, прерывающую выполнение.
// В PHP 7 ошибка типа преобразована в исключение.
try {
function sum(int $a, int $b): int {
return $a + $b;
}
$result = sum("10", "20"); // TypeError: Argument 1 must be of type int
} catch (TypeError $e) {
echo "Поймана ошибка типа: " . $e->getMessage();
// Можно выполнить логирование или альтернативную логику
}
- Новые классы ошибок: В PHP 7 появились
ArithmeticError(например, при целочисленном делении на ноль),DivisionByZeroError,AssertionError(при неудачномassert()).
Итог: PHP 7 унифицировал обработку ошибок и исключений через Throwable, сделав код более надежным, так как критические сценарии теперь можно обрабатывать корректно, а не полагаться на глобальные обработчики ошибок.