Maison développement back-end tutoriel php PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception_PHP教程

PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception_PHP教程

Jul 13, 2016 am 10:28 AM
exception

使用异常

PHP5 增加了类似其他语言的异常处理模块。在PHP代码中所产生的异常可被 throw 语句抛出并被 catch 语句捕获。需要进行异常处理的代码都必须放入到 try 代码块内,以便捕获可能存在的异常。每个try至少对应一个 catch 块。使用多个 catch 可以捕获不同的类所产生的异常。当 try 代码块不再抛出异常或者找不到 catch 能匹配所抛出的异常时,PHP 代码就会在跳转到最后一个 catch 的后面继续执行。当然,PHP 允许在 catch 代码块内再次抛出(throw)异常。

预定义异常 Exception

Exception 类是所有异常的基类,我们可以通过派生 Exception 类来达到自定义异常的目的。下面的清单列出了 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 )                //异常克隆
}

了解完 Exception 后,我们来尝试扩展 exception 类来实现一个自定义异常。

复制代码 代码如下:

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();
}

这里我们抛出类一个 Exception 类型的异常,并在catch里捕获了这个异常,最终打印出了“could not connect to the database.”。或许你想还想显示数据库连接失败的原因信息。下面及通过扩展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 设置一个用户定义的异常处理函数

当一个未捕获的异常发生时所调用的函数名称作为set_exception_handler的参数。该函数必须在调用set_exception_handler()之前被定义。该函数接受一个参数,该参数是一个抛出的异常对象。这可以用来改进上边提到的异常记录日志处理。

复制代码 代码如下:

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

1.3、PHP 允许在 catch 代码块内再次抛出(throw)异常。

复制代码 代码如下:

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

总结

异常的功能非常强大,但是不以为着我们可以在项目中肆意的滥用异常机制,特别是大量使用异常日志的机制,这回大大增加系统系统开销降低应用程序的性能。利用错误代码我们可以方便的对错误信息进行管理,当一个错误信息被多次平抛出时,使用错误代码是科学的选择。我们甚至可以通过错误代码来让错误消息也支持多语言显示。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/788632.htmlTechArticle使用异常 PHP5 增加了类似其他语言的异常处理模块。在PHP代码中所产生的异常可被 throw 语句抛出并被 catch 语句捕获。需要进行异常处理的...
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.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

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)

Causes et solutions aux exceptions ConcurrentModificationException en Java Causes et solutions aux exceptions ConcurrentModificationException en Java Jun 25, 2023 am 10:33 AM

En Java, lorsque plusieurs threads exploitent un objet de collection en même temps, une exception ConcurrentModificationException peut se produire. Cette exception se produit généralement lors de la traversée de la collection lors de la modification ou de la suppression d'éléments. Cela entraînera une incohérence de l'état de la collection, ce qui générera des anomalies. . Cet article examinera les causes et les solutions à cette exception. 1. Causes de l'exception Normalement, exception ConcurrentModificationException

Solution à l'erreur fatale PHP : exception non interceptée 'PDOException' Solution à l'erreur fatale PHP : exception non interceptée 'PDOException' Jun 23, 2023 pm 12:09 PM

Dans le développement PHP, vous pouvez rencontrer des erreurs telles que "PHPFatalerror:Uncaughtexception'PDOException'". Il s'agit d'une exception provoquée par une erreur lorsque PHP exploite la base de données. Si cette erreur n'est pas traitée à temps, elle entraînera une interruption du programme ou des erreurs inattendues. Alors comment résoudre ce problème ? Voici quelques solutions courantes. 1. Vérifiez les paramètres de la base de données. Tout d'abord, nous devons vérifier les paramètres transmis lors de la connexion à la base de données.

Comment gérer UnsupportedEncodingException en Java ? Comment gérer UnsupportedEncodingException en Java ? Jun 25, 2023 am 08:02 AM

Comment gérer UnsupportedEncodingException en Java ? En programmation Java, vous pouvez rencontrer UnsupportedEncodingException. Cette exception est généralement provoquée par une conversion de codage incorrecte ou par un codage non pris en charge. Dans cet article, nous présenterons les causes de l’exception UnsupportedEncodingException et comment y remédier. Qu'est-ce qui n'est pas pris en charge ?

Quelles sont les causes courantes de ConcurrentModificationException en Java ? Quelles sont les causes courantes de ConcurrentModificationException en Java ? Jun 25, 2023 am 11:07 AM

Quelles sont les causes courantes de ConcurrentModificationException en Java ? Lors du parcours d'une collection à l'aide d'un itérateur dans l'infrastructure de collection Java, une exception ConcurrentModificationException est parfois levée, ce qui est l'une des exceptions Java courantes. Alors, quelle est la raison de cette exception ? Tout d’abord, nous devons comprendre que les itérateurs fournis par le framework de collection Java sont avec état. Autrement dit, lors du parcours

Quelles sont les causes courantes d'ArrayStoreException en Java ? Quelles sont les causes courantes d'ArrayStoreException en Java ? Jun 25, 2023 am 09:48 AM

En programmation Java, le tableau est une structure de données importante. Les tableaux peuvent stocker plusieurs valeurs dans une seule variable et, plus important encore, chaque valeur est accessible à l'aide d'un index. Mais lorsque vous travaillez avec des tableaux, certaines exceptions peuvent survenir, l'une d'elles est ArrayStoreException. Cet article abordera les causes courantes des exceptions ArrayStoreException. 1. Incompatibilité de type Le type d'élément doit être spécifié lors de la création du tableau. Lorsque nous essayons de stocker des types de données incompatibles dans un tableau, cela renvoie

Solution à l'exception ArrayStoreException en Java Solution à l'exception ArrayStoreException en Java Jun 25, 2023 am 08:05 AM

Dans le développement Java, nous utilisons souvent des tableaux pour stocker une série de données en raison des avantages de commodité et de performances des tableaux. Cependant, lors du processus d'utilisation des tableaux, certaines exceptions se produiront, et l'une des exceptions courantes est ArrayStoreException. Cette exception est levée lorsque nous stockons des types de données incompatibles dans le tableau. Cet article présente ce qu'est une ArrayStoreException, pourquoi elle se produit et comment la résoudre. 1. Arrêter

Solution à l'exception UnsupportedEncodingException en Java Solution à l'exception UnsupportedEncodingException en Java Jun 25, 2023 am 08:48 AM

UnsupportedEncodingException peut se produire en Java, principalement parce que l'encodage n'est pas pris en charge. Lors du traitement de données textuelles, il est souvent nécessaire d'effectuer une conversion de codage, c'est-à-dire de convertir le contenu d'un format de codage en contenu d'un autre format de codage. Si le type d’encodage utilisé pour la conversion d’encodage n’est pas pris en charge, une exception UnsupportedEncodingException sera levée. Cet article présentera la solution à cette exception. un,

En Java, quelle est la différence entre la classe Exception et la classe Error ? En Java, quelle est la différence entre la classe Exception et la classe Error ? Sep 09, 2023 pm 12:05 PM

La classe Exception et la classe Error sont toutes deux des sous-classes de la classe java.lang.Throwable Nous pouvons gérer les exceptions d'exécution, mais pas les erreurs. Les exceptions sont des objets qui représentent des erreurs logiques qui se produisent lors de l'exécution, provoquant l'entrée de la JVM dans un état « ambigu ». Les objets créés automatiquement par la JVM pour représenter ces erreurs d'exécution sont appelés exceptions. Error est une sous-classe de la classe Throwable qui indique des problèmes graves que les applications raisonnables ne devraient pas tenter de détecter. La plupart de ces erreurs sont des anomalies. Si une exception se produit, nous pouvons utiliser des blocs try et catch pour la gérer. Si une erreur que nous ne pouvons pas gérer se produit, le programme se terminera. Il existe deux types d'exceptions, l'une est CheckedExce

See all articles