PHPKonf Istanbul PHP Conference 2019 - Call for Papers

Les Erreurs en PHP7

PHP7 modifie la facon dont la plupart des erreurs sont rapportées en PHP. Au lieu d'utiliser le mécanisme traditionel de gestion d'erreur de PHP 5, la plupart des erreurs sont maintenant rapportées en lancant une exception Error

Comme pour les exceptions normales, ces exceptions Error remonteront jusqu'à ce qu'elles atteignent le premier bloc d'attrape catch correspondant. S'il n'y a pas de bloc correspondant, le gestionnaire d'exception défini par défaut avec la fonction set_exception_handler() sera appelé. Et s'il n'y a pas de gestionnaire d'exception par defaut, alors l'exception sera convertie en erreur fatale et sera traitée comme une erreur traditionnelle.

Comme la hiérarchie des classes Error n'hérite pas d'Exception, le code qui utilise les blocs d'attrape catch (Exception $e) { ... } pour traiter les exceptions non-interceptées en PHP 5 n'interceptera pas ces exceptions Errors. Il faudra donc utiliser soit un bloc catch (Error $e) { ... }, soit un gestionnaire d'exception défini avec set_exception_handler().

add a note add a note

User Contributed Notes 4 notes

up
81
hungry dot rahly at gmail dot com
2 years ago
You can catch both exceptions and errors by catching(Throwable)
up
33
demis dot palma at tiscali dot it
2 years ago
Throwable does not work on PHP 5.x.

To catch both exceptions and errors in PHP 5.x and 7, add a catch block for Exception AFTER catching Throwable first.
Once PHP 5.x support is no longer needed, the block catching Exception can be removed.

try
{
   // Code that may throw an Exception or Error.
}
catch (Throwable $t)
{
   // Executed only in PHP 7, will not match in PHP 5
}
catch (Exception $e)
{
   // Executed only in PHP 5, will not be reached in PHP 7
}
up
6
ryan dot jentzsch@{gmail} dot com
1 year ago
An excellent blog post on the difference between exceptions, throwables and how PHP 7 handles these can be found here: https://trowski.com/2015/06/24/throwable-exceptions-and-errors-in-php7/
up
6
lubaev dot ka at gmail dot com
2 years ago
php 7.1

try {
   // Code that may throw an Exception or ArithmeticError.
} catch (ArithmeticError | Exception $e) {
   // pass
}
To Top