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ésCommencez 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 :
Dites-nous pourquoi nous devons personnaliser certaines exceptions en dehors de celles intégrées :
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.
Voyons le fonctionnement de cette fonction en prenant quelques exemples :
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 :
Explication :
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 :
Explication :
Vous trouverez ci-dessous les avantages :
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!