Je crée un nouveau plugin et je veux gérer les erreurs proprement. Je trouve la classe WP_Error difficile à manier, alors j’ai décidé d’utiliser des exceptions. Le manque de support PHP 4 ne me dérange pas.
$error = true;
if ($error) {
// Throw an error
throw new CustomException('A custom exception');
}
Ce que je veux vraiment pouvoir faire, c'est lancer des exceptions conformément au code ci-dessus dans mon plugin (et utiliser des blocs try/catch le cas échéant), mais quand il y a une exception non capturée, je veux pouvoir définir un gestionnaire d'erreurs c'est-à-dire : set_exception_handler()
qui ne capture que les exceptions non capturées de mon plugin. Ainsi, si un autre gestionnaire d'exceptions de thèmes a déjà été défini, il n'interfère pas.
Mieux encore, j'intercepterais n'importe laquelle de mes exceptions de plug-in, je les traiterais comme il convient, puis je pourrais choisir de les transférer sur tout autre gestionnaire d'exceptions déjà défini.
Est-ce possible? Ou est-il possible de définir un gestionnaire d'exceptions qui capture uniquement les exceptions dans la classe où il est défini? Je réfléchissais à la création d'une customException qui étendait l'exception, puis à la création d'un gestionnaire d'exception fourre-tout personnalisé.
Vous pouvez également prolonger les expections et ne capturer que celles que vous lancez.
Par exemple:
function do_add_my_pws_exceptions() {
class PWS_Exception extends Exception {}
class PWS_Init_Exception extends PWS_Exception {}
}
add_action('plugins_loaded', 'do_add_my_pws_exceptions');
Bien sûr, vous devez être certain que l'utilisateur exécute au moins la version 5 de PHP en demandant à votre thème d'activation de plug-in d'effectuer les opérations suivantes:
$php_version = phpversion();
if ( version_compare( $php_version, '5.3', '<' ) ) {
# deactivate your plugin or abort installing your theme and tell the user why
}
Quoi qu'il en soit, une fois que cela est fait, vous pouvez alors faire des choses comme:
try {
# whatever you are doing
throw new PWS_Exception("This is my exception", 10001);
} catch ( PWS_Exception $e ) {
# Your custom handling
}
Les exceptions non levées par vous ne seront pas attrapées.
Lorsque vous utilisez set_exception_handler
, le nom du gestionnaire d'exceptions précédent est renvoyé. Vous pouvez le stocker et l'utiliser avec call_user_func
ou simplement utiliser la syntaxe ()
.
http://us.php.net/manual/en/function.set-exception-handler.php
$prev_handler = set_exception_handler('my_handler');
call_user_func($prev_handler, $exception);
# OR
$prev_handler($exception);