Квест → Как хакнуть форму
Прошли: 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)