Квест → Как хакнуть форму
Прошли: 77
"PHP RFC: Exceptions in the engine (for PHP 7)" за авторством Никиты Попова был принят. Голосование началось и закончилось в оригинальные числа - 23 февраля и 8 марта .
Если в двух словах, то в RFC предлагается использовать исключения (Exception) на уровне движка, что позволит вместо fatal и recoverable fatal ошибок выбрасывать исключения.
Рассмотрим следующий пример кода:
function call_method($obj) { $obj->method(); } call_method(null); // oops!
На данный момент этот код при водит к фатальной ошибке:
Fatal error: Call to a member function method() on a non-object in /path/file.php on line 4
В данном RFC предлагается выбрасывать исключение EngineException
, и его можно будет отловить привычным способом:
try { call_method(null); // oops! } catch (EngineException $e) { echo "Exception: {$e->getMessage()}\n"; }
Exception: Call to a member function method() on a non-object
Предлагается использовать следующую иерархию классов Исключений:
BaseException (abstract) +- EngineException +- ParseException +- Exception +- ErrorException +- RuntimeException +- ... +- ...
Кроме этого предлагается использовать ParseException
вместо имеющихся ошибок парсинга, которое можно будет отловить так:
try { $result = eval($code); } catch (\ParseException $exception) { // Handle $exception }
Итак, после этого мы сможем перехватывать такие ошибки и корректно их обрабатывать. Станет возможным выполнение корректного выхода из треда, правильное освобождение ресурсов, если выход не требуется (например, в блоке finally
или в деструкторах классов, которые всё-таки будут вызываться). Более подробно об этом RFC можно прочитать на php.net: PHP RFC: Exceptions in the engine (for PHP 7)