Maison >développement back-end >tutoriel php >Explication détaillée de l'utilisation de la classe de gestion des exceptions php Exception

Explication détaillée de l'utilisation de la classe de gestion des exceptions php Exception

伊谢尔伦
伊谢尔伦original
2017-06-30 09:37:597346parcourir

Les exceptions sont souvent utilisées pour gérer divers types d'erreurs rencontrées lors de l'exécution normale d'un programme. Par exemple, lors de la liaison de bases de données, vous devez faire face à un échec de connexion à la base de données. L'utilisation d'exceptions peut améliorer la tolérance aux pannes de nos programmes, rendant nos applications plus stables et robustes.

Utilisation des exceptions

PHP5 ajoute un module de gestion des exceptions similaire à d'autres langages. Les exceptions générées dans le code PHP peuvent être levées par l'instruction throw et interceptées par l'instruction catch. Le code qui nécessite la gestion des exceptions doit être placé dans un bloc de code try pour intercepter d'éventuelles exceptions. Chaque essai correspond à au moins un bloc catch. Utilisez plusieurs captures pour intercepter les exceptions générées par différentes classes. Lorsque le bloc de code try ne lance une exception ou qu'aucun catch ne peut être trouvé pour correspondre à l'exception lancée, le code PHP poursuivra son exécution après être passé au dernier catch. Bien entendu, PHP permet de relancer des exceptions dans les blocs catch.

Exceptions prédéfinies Exception

La classe Exception est la classe de base de toutes les exceptions. Nous pouvons atteindre l'objectif des exceptions personnalisées en dérivant la classe Exception. La liste suivante répertorie les informations de base sur Exception.

Exception {
    /* 属性 */
    protected string $message ;        //异常消息内容
    protected int $code ;            //异常代码
    protected string $file ;        //抛出异常的文件名
    protected int $line ;            //抛出异常在该文件中的行号
    /* 方法 */
    public construct ([ string $message = "" [, int $code = 0 [, Exception $previous = NULL ]]] )    //异常
构造函数
    final public string getMessage ( void )            //获取异常消息内容
    final public Exception getPrevious ( void )        //返回异常链中的前一个异常
    final public int getCode ( void )                //获取异常代码
    final public string getFile ( void )            //获取发生异常的程序文件名称
    final public int getLine ( void )                //获取发生异常的代码在文件中的行号
    final public array getTrace ( void )            //获取异常追踪信息
    final public string getTraceAsString ( void )    //获取字符串类型的异常追踪信息
    public string toString ( void )                //将异常对象转换为字符串
    final private void clone ( void )                //异常克隆
}

Après avoir compris Exception, essayons d'étendre la classe d'exception pour implémenter une exception personnalisée.

function connectToDatabase()
{    
    if(!$link = mysql_connect("myhost","myuser","mypassw","mybd"))
    {
        throw new Exception("could not connect to the database.");
    }
}
try
{
    connectToDatabase();
}
catch(Exception $e)
{echo $e->getMessage();
}

Ici, nous lançons une exception de type Exception, captons cette exception dans catch et enfin imprimons "impossible de se connecter à la base de données.". Peut-être souhaitez-vous également afficher des informations sur la raison pour laquelle la connexion à la base de données a échoué. Ensuite, nous implémentons nos informations personnalisées en étendant la classe d'exception.

class MyException extends Exception
{
    protected $ErrorInfo;
    //构造函里处理一些逻辑,然后将一些信息传递给基类
    public function construct($message=null,$code=0)
    {
        $this->ErrorInfo = '自定义错误类的错误信息';
        parent::construct($message,$code);
    }    
    //提供获取自定义类信息的方法
    public function GetErrorInfo()
    {
        return $this->ErrorInfo;
    }
    /**
     *
     *这里还可以添加异常日志,只需在上面的构造函数里调用就可以了
     *
     */
    public function log($file)
    {
        
file_put_contents($fiel,$this->toString(),FILE_APPEND);
    }
}
function connectToDatabase()
{    
    throw new MyException("ErrorMessage");
}
try
{    
    connectToDatabase();
}
catch(MyException $e)
{    
    echo $e->getMessage() . "\n";
    echo $e->GetErrorInfo();
}

set_exception_handler Définit une fonction de gestion des exceptions définie par l'utilisateur

Le nom de la fonction appelée lorsqu'une exception non interceptée se produit en tant que paramètre de set_exception_handler. Cette fonction doit être définie avant d'appeler set_exception_handler(). Cette fonction accepte un paramètre, qui est un objet d'exception levée. Cela peut être utilisé pour améliorer la gestion de la journalisation des exceptions mentionnée ci-dessus.

function ExceptionLogger($exception)
{
    $file='ExceptionLog.log';
    file_put_contents($fiel,$exception->toString(),FILE_APPEND);
}
set_exception_handler(ExceptionLogger);

1.3. PHP permet de lancer à nouveau des exceptions dans le bloc de code catch.

try
{
    #code...
}
catch(Exception $e)
{
    if($e->getCode() == 999)
    {
        #进行一些操作
    }
    else
    {
        throw $e;
    }
}

Résumé

Les fonctions d'exception sont très puissantes, mais nous ne pensons pas que nous puissions abuser du mécanisme d'exception sans raison dans le projet, en particulier le mécanisme qui utilise des journaux d'exception en grande quantité. Cette fois, la surcharge du système a considérablement augmenté et réduit les performances des applications. Nous pouvons utiliser des codes d'erreur pour gérer facilement les messages d'erreur. Lorsqu'un message d'erreur est émis plusieurs fois, l'utilisation de codes d'erreur est un choix scientifique. Nous pouvons même utiliser des codes d'erreur pour afficher des messages d'erreur dans plusieurs langues.

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