Maison développement back-end tutoriel php À propos des opérations de gestion des exceptions PHP

À propos des opérations de gestion des exceptions PHP

May 08, 2018 am 09:17 AM
php 异常处理 操作

L'exception est utilisée pour modifier le flux normal du script lorsqu'une erreur spécifiée se produit. Cet article expliquera en détail le fonctionnement de la gestion des exceptions php.

Qu'est-ce qu'une exception ?

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

La gestion des exceptions est utilisée pour modifier le flux normal d'un 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é

L'exécution du code est basculée vers une fonction de gestionnaire d'exception prédéfinie

En fonction de la situation, le processeur 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éer des gestionnaires d'exceptions personnalisés

Exceptions multiples

Relancer Exceptions

Définir le niveau supérieur gestionnaire d'exceptions

Utilisation de base des exceptions

Lorsqu'une exception est levée, le code suivant ne continuera pas à s'exécuter et PHP essaiera de trouver un bloc de code "catch" correspondant.

Si l'exception n'est pas interceptée et qu'il n'est pas nécessaire d'utiliser set_exception_handler() pour le traitement correspondant, alors une erreur grave (erreur fatale) se produira et "Uncaught Exception" sera affiché Message d'erreur (exception non capturée).

Essayons de lancer une exception sans l'attraper :

<?php
//create function with an exception
function checkNum($number)
 {
 if($number>1)
  {
  throw new Exception("Value must be 1 or below");
  }
 return true;
 }
//trigger exception
checkNum(2);
?>
Copier après la connexion

Le code ci-dessus obtiendra une erreur comme celle-ci :

Erreur fatale : exception non interceptée 'Exception'
avec le message 'La valeur doit être inférieure ou égale à 1' dans C:webfoldertest.php:6
Trace de la pile : #0 C:webfoldertest.php(12) :
checkNum(28) # 1 {main} lancé C:webfoldertest.php en ligne 6

Essayer, lancer et attraper

Pour éviter l'erreur dans l'exemple ci-dessus, nous devons créer un code approprié pour la gérer anormalement.

Le gestionnaire correct doit inclure :

Try - Les fonctions qui utilisent des exceptions doivent être dans un bloc "try". Si aucune exception n'est déclenchée, le code continue son exécution comme d'habitude. Mais si une exception est déclenchée, une exception sera levée.

Throw - Ceci spécifie comment déclencher l'exception. Chaque "lancement" doit correspondre à au moins un "catch"

Catch - le bloc de code "catch" interceptera l'exception et créera un objet contenant les informations d'exception

Déclenchons une exception :

//Créer une fonction qui peut lever une exception

function checkNum($number)
 { if($number>1)  
 {  throw new Exception("Value must be 1 or below"); 
  } return true; }//在 "try" 代码块中触发异常try 
  { checkNum(2); //If the exception is thrown, this text will not be shown echo &#39;If you see this, the number is 1 or below&#39;;
   }//捕获异常catch(Exception $e)
    { echo &#39;Message: &#39; .$e->getMessage();
     }?>
Copier après la connexion

Le code ci-dessus obtiendra une erreur comme celle-ci :

Message : La valeur doit être inférieure ou égale à 1

Exemple d'explication :

Le code ci-dessus lève une exception et l'attrape :

Create checkNum () fonction. Il détecte si le nombre est supérieur à 1. Si c'est le cas, lancez une exception.

Appelez la fonction checkNum() dans le bloc de code "try".

Une exception dans la fonction checkNum() est levée.

Le bloc de code "catch" reçoit l'exception et crée un objet ($e) contenant les informations sur l'exception.

En appelant $e->getMessage() depuis cet objet d'exception, le message d'erreur de l'exception est généré

Cependant, afin de suivre le principe de "chaque lancer doit correspondre à a catch", Un gestionnaire d'exceptions de niveau supérieur peut être configuré pour gérer les erreurs manquées.

Créer une classe d'exception personnalisée

Créer un gestionnaire d'exception personnalisé est très simple. Nous avons simplement créé une classe spécialisée dont les fonctions peuvent être appelées lorsqu'une exception survient en PHP. Cette classe doit être une extension de la classe d'exception.

Cette classe d'exception personnalisée hérite de toutes les propriétés de la classe d'exception de PHP et vous pouvez y ajouter des fonctions personnalisées.

Nous commençons par créer la classe d'exception :

<?php
class customException extends Exception
 {
 public function errorMessage()
  {
  //error message
  $errorMsg = &#39;Error on line &#39;.$this->getLine().&#39; in &#39;.$this->getFile()
  .&#39;: <b>&#39;.$this->getMessage().&#39;</b> is not a valid E-Mail address&#39;;
  return $errorMsg;
  }
 }
$email = "someone@example...com";
try
 {
 //check if 
 if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
  {
  //throw exception if email is not valid
  throw new customException($email);
  }
 }
catch (customException $e)
 {
 //display custom message
 echo $e->errorMessage();
 }
?>
Copier après la connexion

Cette nouvelle classe est une copie de l'ancienne classe d'exception, plus la fonction errorMessage(). Juste parce qu'il s'agit d'une copie de l'ancienne classe, elle hérite des propriétés et méthodes de l'ancienne classe, et nous pouvons utiliser les méthodes de la classe d'exception, telles que getLine(), getFile() et getMessage( ).

Explication de l'exemple :

Le code ci-dessus lève une exception et l'attrape via une classe d'exception personnalisée :

la classe customException() est aussi ancienne Créée en tant qu'extension du classe d'exceptions. De cette façon, il hérite de toutes les propriétés et méthodes de l’ancienne classe.

Créer la fonction errorMessage(). Si l'adresse e-mail est illégale, la fonction renvoie un message d'erreur

Définissez la variable $email sur la chaîne d'adresse e-mail illégale

Exécutez le bloc de code "try", car L'adresse e-mail n'est pas valide, donc une exception est levée

Le bloc de code "catch" intercepte l'exception et affiche le message d'erreur

Plusieurs exceptions

peuvent être utilisées pour un script Plusieurs exceptions pour détecter plusieurs situations.

可以使用多个 if..else 代码块,或一个 switch 代码块,或者嵌套多个异常。这些异常能够使用不同的 exception 类,并返回不同的错误消息:

<?php
class customException extends Exception
{
public function errorMessage()
{
//error message
$errorMsg = &#39;Error on line &#39;.$this->getLine().&#39; in &#39;.$this->getFile()
.&#39;: <b>&#39;.$this->getMessage().&#39;</b> is not a valid E-Mail address&#39;;
return $errorMsg;
}
}
$email = "someone@example.com";
try
 {
 //check if 
 if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
  {
  //throw exception if email is not valid
  throw new customException($email);
  }
 //check for "example" in mail address
 if(strpos($email, "example") !== FALSE)
  {
  throw new Exception("$email is an example e-mail");
  }
 }
catch (customException $e)
 {
 echo $e->errorMessage();
 }
catch(Exception $e)
 {
 echo $e->getMessage();
 }
?>
Copier après la connexion

例子解释:

上面的代码测试了两种条件,如何任何条件不成立,则抛出一个异常:

customException() 类是作为旧的 exception 类的一个扩展来创建的。这样它就继承了旧类的所有属性和方法。

创建 errorMessage() 函数。如果 e-mail 地址不合法,则该函数返回一个错误消息。

执行 "try" 代码块,在第一个条件下,不会抛出异常。

由于 e-mail 含有字符串 "example",第二个条件会触发异常。

"catch" 代码块会捕获异常,并显示恰当的错误消息

如果没有捕获 customException,紧紧捕获了 base exception,则在那里处理异常。

重新抛出异常

有时,当异常被抛出时,您也许希望以不同于标准的方式对它进行处理。可以在一个 "catch" 代码块中再次抛出异常。

脚本应该对用户隐藏系统错误。对程序员来说,系统错误也许很重要,但是用户对它们并不感兴趣。为了让用户更容易使用,您可以再次抛出带有对用户比较友好的消息的异常:

<?php
class customException extends Exception
 {
 public function errorMessage()
  {
  //error message
  $errorMsg = $this->getMessage().&#39; is not a valid E-Mail address.&#39;;
  return $errorMsg;
  }
 }
$email = "someone@example.com";
try
 {
 try
  {
  //check for "example" in mail address
  if(strpos($email, "example") !== FALSE)
   {
   //throw exception if email is not valid
   throw new Exception($email);
   }
  }
 catch(Exception $e)
  {
  //re-throw exception
  throw new customException($email);
  }
 }
catch (customException $e)
 {
 //display custom message
 echo $e->errorMessage();
 }
?>
Copier après la connexion

例子解释:

上面的代码检测在邮件地址中是否含有字符串 "example"。如果有,则再次抛出异常:

customException() 类是作为旧的 exception 类的一个扩展来创建的。这样它就继承了旧类的所有属性和方法。

创建 errorMessage() 函数。如果 e-mail 地址不合法,则该函数返回一个错误消息。

把 $email 变量设置为一个有效的邮件地址,但含有字符串 "example"。

"try" 代码块包含另一个 "try" 代码块,这样就可以再次抛出异常。

由于 e-mail 包含字符串 "example",因此触发异常。

"catch" 捕获到该异常,并重新抛出 "customException"。

捕获到 "customException",并显示一条错误消息。

如果在其目前的 "try" 代码块中异常没有被捕获,则它将在更高层级上查找 catch 代码块。

设置顶层异常处理器 (Top Level Exception Handler)

set_exception_handler() 函数可设置处理所有未捕获异常的用户定义函数。

<?php
function myException($exception)
{
echo "<b>Exception:</b> " , $exception->getMessage();
}
set_exception_handler(&#39;myException&#39;);
throw new Exception(&#39;Uncaught Exception occurred&#39;);
?>
Copier après la connexion

以上代码的输出应该类似这样:

Exception: Uncaught Exception occurred

在上面的代码中,不存在 "catch" 代码块,而是触发顶层的异常处理程序。应该使用此函数来捕获所有未被捕获的异常。

异常的规则

需要进行异常处理的代码应该放入 try 代码块内,以便捕获潜在的异常。

每个 try 或 throw 代码块必须至少拥有一个对应的 catch 代码块。

使用多个 catch 代码块可以捕获不同种类的异常。

可以在 try 代码块内的 catch 代码块中再次抛出(re-thrown)异常。

本篇详细的讲解了对于php异常的处理,更多的学习资料清关注php中文网即可观看。

相关推荐:

关于PHP 文件打开/读取/读取相关知识

关于PHP Include 文件的讲解

关于PHP EOF(heredoc) 的使用说明

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 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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

7 fonctions PHP que je regrette de ne pas connaître auparavant 7 fonctions PHP que je regrette de ne pas connaître auparavant Nov 13, 2024 am 09:42 AM

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

Comment analysez-vous et traitez-vous HTML / XML dans PHP? Comment analysez-vous et traitez-vous HTML / XML dans PHP? Feb 07, 2025 am 11:57 AM

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Apr 05, 2025 am 12:04 AM

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Programme PHP pour compter les voyelles dans une chaîne Programme PHP pour compter les voyelles dans une chaîne Feb 07, 2025 pm 12:12 PM

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Comment gérez-vous efficacement les exceptions en PHP (essayez, attrapez, enfin, jetez)? Comment gérez-vous efficacement les exceptions en PHP (essayez, attrapez, enfin, jetez)? Apr 05, 2025 am 12:03 AM

En PHP, la gestion des exceptions est réalisée grâce aux mots clés d'essai, de catch, enfin et de lancement. 1) Le bloc d'essai entoure le code qui peut lancer des exceptions; 2) Le bloc de capture gère les exceptions; 3) Enfin, Block garantit que le code est toujours exécuté; 4) Le lancer est utilisé pour lancer manuellement les exceptions. Ces mécanismes aident à améliorer la robustesse et la maintenabilité de votre code.

Expliquez la liaison statique tardive en PHP (statique: :). Expliquez la liaison statique tardive en PHP (statique: :). Apr 03, 2025 am 12:04 AM

Liaison statique (statique: :) ​​implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

See all articles