Maison  >  Article  >  développement back-end  >  Exception personnalisée PHP

Exception personnalisée PHP

WBOY
WBOYoriginal
2024-08-29 13:06:10312parcourir

Le flux normal d'un script s'arrête lorsqu'une erreur se produit, et une exception peut être utilisée pour la modifier. Un utilisateur peut définir des exceptions personnalisées selon les exigences de la bibliothèque, de l'entreprise ou de notre application en étendant la classe d'exception déjà intégrée dans la base de code PHP. Ici, nous verrons les propriétés et les membres, qui sont tous à la portée de la classe enfant, qui récupère la classe d'exception intégrée.

PUBLICITÉ Cours populaire dans cette catégorie DEVELOPPEUR PHP - Spécialisation | Série de 8 cours | 3 tests simulés

Commencez votre cours de développement de logiciels libres

Développement Web, langages de programmation, tests de logiciels et autres

Vous trouverez ci-dessous les événements qui se produisent lorsqu'une exception se produit :

  • L'état actuel du code est d'abord enregistré.
  • Le gestionnaire d'exceptions continuera l'exécution à partir de l'état enregistré du code, mettra fin à son exécution ou continuera l'exécution à partir d'un autre endroit du code.

Dites-nous pourquoi nous devons personnaliser certaines exceptions en dehors de celles intégrées :

  • Nous pouvons facilement reconnaître exactement quelle classe, extension ou chaîne génère l'exception dans la hiérarchie du code.
  • En utilisant cela, le développeur peut facilement repérer les problèmes dans le code.
  • Il peut être utilisé pour marquer certaines exceptions de bibliothèque comme DOM, PDO, etc.
  • Nous pouvons configurer autant d'exceptions personnalisées que nécessaire.

Syntaxe de l'exception personnalisée PHP

Pour qu'une exception personnalisée soit levée, nous devons simplement étendre une autre classe de la classe Exception, qui est déjà intégrée.

namespace CustExcep;
class CustException extends \Exception { }

Avec la classe CustException ci-dessus maintenant créée, nous pouvons lancer une exception personnalisée comme ci-dessous :

throw new \CustExcep\CustException('Insert an Exception message here');

Nous pouvons également personnaliser cela si nécessaire pour remplacer certaines propriétés de classe telles que le fichier, le code, la ligne et son message ou en utilisant la méthode __toString() pour forcer ce message d'exception au format avec lequel nous devons travailler.

Fonctionnement de la fonction personnalisée en PHP

Voyons le fonctionnement de cette fonction en prenant quelques exemples :

Exemple n°1

Code :

<?php
/**
* Here defining a class for custom exception
*/
class CustException extends Exception
{
// Here we are redefining the exception message so it is not optional
public function __construct($exmsg, $val = 0, Exception $old = null) {
// random code goes here
$exmsg = 'Default';
// ensure assignment of all values correctly
parent::__construct($exmsg, $val, $old);
}
// representing the custom string object
public function __toString() {
return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
}
public function custFunc() {
echo "Insert any custom message here\n";
}
}
/**
* This class to test the exception
*/
class ExceptionTest
{
public $var;
const NO_EXCEPTION = 0;
const CUST_EXCEPTION = 1;
const DEF_EXCEPTION = 2;
function __construct($val = self::NO_EXCEPTION) {
switch ($val) {
case self::CUST_EXCEPTION:
// throw custom exception
throw new CustException('1 is considered as invalid', 5);
break;
case self::DEF_EXCEPTION:
// throw default one.
throw new Exception('2 is considered an invalid parameter', 6);
break;
default:
// Will not throw any exception and creates an object here
$this->var = $val;
break;
}
}
}
// Example 1
try {
$new = new ExceptionTest(ExceptionTest::CUST_EXCEPTION);
} catch (CustException $exp) { // This exception will be caught
echo "Test custom exception is caught\n", $exp;
$exp->custFunc();
} catch (Exception $exp) { // This is skipped
echo "Default exception is caught here\n", $exp;
}

Sortie :

Exception personnalisée PHP

Explication :

  • Dans cet exemple, nous verrons comment personnaliser nos exceptions. Pour ce faire, nous définissons d’abord une classe à cet effet, et en cela, nous redéfinissons le message d’exception à l’aide d’un constructeur pour le rendre non facultatif. Nous définissons le message d'exception sur un texte par défaut. Ici, nous devons nous assurer que tous les paramètres que nous utilisons sont correctement attribués. Cela conduit à des erreurs. Nous créons ensuite une autre fonction appelée custFunc() et définissons ici notre message d'exception personnalisé.
  • Nous utilisons l'instruction switch pour définir 3 exceptions personnalisées différentes pour ces 3 valeurs, et dans le cas par défaut, elle ne lèvera aucune exception et créera l'objet requis.
  • Pour essayer cela, nous essayons de créer un nouvel objet en passant la valeur CUST_EXCEPTION. Ici, nous appellerons notre méthode custFunc() définie au début. Par conséquent, cela récupérera le message d'exception défini et l'affichera.

Exemple n°2

Code :

<?php
class custException extends Exception {
public function custMsg() {
//error message
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> is not a valid password. Please enter a valid one.';
return $errorMsg;
}
}
$pwd = "Password@123";
try {
//validation
if(filter_var($pwd, FILTER_VALIDATE_EMAIL) === FALSE) {
//exception thrown if password invalid
throw new custException($pwd);
}
}
catch (custException $error) {
//show custom error
echo $error->custMsg();
}
?>

Sortie :

Exception personnalisée PHP

Explication :

  • Dans ce message, nous obtenons également le numéro de ligne pour générer une erreur appropriée. Nous entrons la valeur du mot de passe puis la comparons avec VALIDATE_PWD. Si cela renvoie vrai, aucune exception n’est levée ; si le résultat est faux, il lève notre exception personnalisée.

Avantages de l'exception personnalisée PHP

Vous trouverez ci-dessous les avantages :

  • Les exceptions intégrées sont bonnes, mais les exceptions personnalisées ont plus d'importance du point de vue d'un développeur car elles peuvent cibler et intercepter les exceptions où il le souhaite.
  • Facile à déboguer car le développeur peut définir des exceptions personnalisées à plusieurs points et les gérer.
  • Peut facilement modifier la classe Exception existante et l'utiliser de manière plus efficace en l'étendant.
  • C'est utile pour détecter les exceptions « non interceptées ».

Conclusion

Dans cet article, nous avons vu le concept de définition et de gestion personnalisées des exceptions. Il existe également d'autres cas où cela peut être utilisé, comme dans le bloc try-catch, en lançant plusieurs exceptions, en relançant certaines exceptions, en définissant un gestionnaire d'exceptions de première classe, etc.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Classe finale PHPArticle suivant:Classe finale PHP