Explication détaillée de PHP lançant des exceptions et interceptant des types spécifiques d'exceptions

墨辰丷
Libérer: 2023-03-28 16:02:01
original
2237 Les gens l'ont consulté

La capture d'exceptions peut être facilement ajoutée dans de nombreux outils IDE actuels à l'aide de touches de raccourci pour empêcher les utilisateurs de voir des erreurs qu'ils ne peuvent pas comprendre ou même de planter inexplicablement, entraînant une mauvaise expérience utilisateur. Même l'affichage d'une invite de crash conviviale est bien meilleur que l'affichage direct de l'erreur : xxxx xxxxxxxxx. L'article suivant présentera en détail comment PHP génère des exceptions et intercepte des types spécifiques d'exceptions.

Qu'est-ce qu'une exception ?

PHP 5 fournit une nouvelle méthode de gestion des erreurs orientée objet.

La gestion des exceptions est utilisée pour modifier le flux normal du script lorsqu'une situation d'erreur (exception) spécifiée se produit. Cette situation est appelée une exception.

Lorsqu'une exception est déclenchée, ce qui se produit généralement est :

L'état actuel du code est enregistré

Code exécution Passé à la fonction de gestionnaire d'exceptions prédéfinie

Selon la situation, le gestionnaire peut redémarrer l'exécution du code à partir de l'état du code enregistré, terminer l'exécution du script ou continuer l'exécution du script à partir d'un autre emplacement dans le code

Nous montrerons différentes méthodes de gestion des erreurs :

Utilisation de base des exceptions

Création d'exceptions personnalisées Gestionnaire d'exceptions

Exceptions multiples

Relancer les exceptions

Définir un gestionnaire d'exceptions de niveau supérieur

php throw Le but ultime de lancer des exceptions et détecter des types spécifiques d'exceptions consiste à fournir des solutions correspondantes afin que le code puisse continuer à s'exécuter.

L'environnement de test pour cet article : PHP5.5.36 Safari 9.1.2


  <?php
  header("content-type:text/html; charset=utf-8");
  /**
  * 包裹重量异常
  */
  class HeavyParcelException extends Exception {}
  
  /**
  * 包裹类
 */
 class Parcel {
 
   /**
   * 包裹寄送目的地地址
   */
   public $address;
 
   /**
   * 包裹重量
   */
   public $weight;
 }
 
 /**
 * 派送员
 */
 class Courier {
  
   /** 
   * 运送
   */
   public function ship(Parcel $parcel) {
     //check we have an address
     //如果包裹的目的地为空
     if(empty($parcel->address)) {
       throw new Exception(&#39;address not Specified(未填写地址)!&#39;);
     } 
 
     //check the weight
     //如果重量超过5
     if($parcel->weight > 5) {
            throw new HeavyParcelException(&#39;Parcel exceeds courier limit(包裹超过运送上限)!&#39;);
     } 
 
     //otherwise we&#39;re coll
     return true;
   }
 }
 
 $myCourier = new Courier();
 $parcel = new Parcel();
 //add the address if we have it 为了测试这里不填写地址
 $parcel->weight = 7;
 try {
   $myCourier->ship($parcel);
   echo "parcel shipped";
 } catch (HeavyParcelException $e) {//捕获HeavyParcelException 不写这个异常的类型名字,就跑到普通Exception抛出去了
   echo "Parcel weight error(重量错误): " . $e->getMessage();
   //redirect them to choose another courier
 } catch (Exception $e) {
   echo "Someting went wrong(地址错误): " . $e->getMessage();
   //exit so we don&#39;t try to proceed any further
   exit;
 }
 echo &#39;<br/>&#39;;
 $a = 123;
 echo $a;
Copier après la connexion


Séquence d'exécution du code à partir de la ligne 54 :

55 >

32 >

35(ship méthode La première chose à vérifier est que l'adresse est vide, et Exception sera lancé ici à la place du HeavyParcelException à la ligne 57) >

60 (capturé Exception) >

616263 Erreur d'adresse de sortie exit ; les lignes 65 à 67 ne seront pas sorties

Conseils :

J'ai l'impression que le la chose la plus importante à ce sujet est de déterminer l’ordre dans lequel le code est exécuté. Écrivez quelques paragraphes, puis révisez-les et exécutez-les.

1. L'ordre de capture dépend du type de try le code dans throw, puis de l'ordre dans Exception. catch

La ligne 2.57 capture un type spécifique

ne peut pas être écrit de manière incorrecte, sinon l'écriture de HeavyParcelException posera des problèmes. Vous pouvez l'essayer vous-même. Exception

1) Par exemple, si l'adresse n'est pas vide et que la ligne 57 est écrite comme

, l'erreur de poids sera capturée dans son objet de classe parent à la ligne 60. Ce n'est pas ce que nous voulons. HeavyParcelException111

2) Par exemple, si l'adresse est vide et que la ligne 57 est écrite comme

, une erreur d'adresse sera générée, mais ce qui est capturé est le Exception qui est à l'origine responsable du poids. Ce n’est pas non plus ce que nous souhaitons. catch

Ce qui précède représente l’intégralité du contenu de cet article, j’espère qu’il sera utile à l’étude de chacun.


Recommandations associées :

Explication détaillée de la façon de modifier le fichier hosts en PHP

Méthodes PHP pour implémenter l'exécution asynchrone de scripts

phpImplémenter la définition et l'utilisation de la classe de cache Redis


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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal