Rumah pembangunan bahagian belakang tutorial php PHP 面向对象程序设计(oop)学习笔记 (四)

PHP 面向对象程序设计(oop)学习笔记 (四)

Jun 01, 2016 am 11:51 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;
    }
}

总结

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

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Punca dan penyelesaian kepada pengecualian ConcurrentModificationException dalam Java Punca dan penyelesaian kepada pengecualian ConcurrentModificationException dalam Java Jun 25, 2023 am 10:33 AM

Di Java, apabila berbilang benang mengendalikan objek koleksi pada masa yang sama, pengecualian ConcurrentModificationException mungkin berlaku apabila melintasi koleksi apabila mengubah suai atau memadamkan elemen Ini akan menyebabkan keadaan koleksi menjadi tidak konsisten . Artikel ini akan menyelidiki punca dan penyelesaian kepada pengecualian ini. 1. Punca Pengecualian Biasanya, Pengecualian ConcurrentModificationException

Bagaimana untuk menangani UnsupportedEncodingException di Java? Bagaimana untuk menangani UnsupportedEncodingException di Java? Jun 25, 2023 am 08:02 AM

Bagaimana untuk menangani UnsupportedEncodingException di Java? Dalam pengaturcaraan Java, anda mungkin menghadapi UnsupportedEncodingException. Pengecualian ini biasanya disebabkan oleh penukaran pengekodan yang salah atau pengekodan yang tidak disokong. Dalam artikel ini, kami akan memperkenalkan punca pengecualian UnsupportedEncodingException dan cara menanganinya. Apa itu Tidak DisokongE

Penyelesaian kepada ralat Fatal PHP: Pengecualian tidak ditangkap 'PDOException' Penyelesaian kepada ralat Fatal PHP: Pengecualian tidak ditangkap 'PDOException' Jun 23, 2023 pm 12:09 PM

Dalam pembangunan PHP, anda mungkin menghadapi ralat seperti "PHPFatalerror:Uncaughtexception'PDOException'". Ini adalah pengecualian yang disebabkan oleh ralat semasa PHP mengendalikan pangkalan data. Jika ralat ini tidak dikendalikan dalam masa, ia akan menyebabkan gangguan program atau ralat yang tidak dijangka. Jadi bagaimana untuk menyelesaikan masalah ini? Berikut ialah beberapa penyelesaian biasa. 1. Semak parameter pangkalan data Pertama, kita perlu menyemak parameter yang diluluskan semasa menyambung ke pangkalan data.

Apakah punca biasa ConcurrentModificationException di Java? Apakah punca biasa ConcurrentModificationException di Java? Jun 25, 2023 am 11:07 AM

Apakah punca biasa ConcurrentModificationException di Java? Apabila melintasi koleksi menggunakan iterator dalam rangka kerja koleksi Java, pengecualian ConcurrentModificationException kadangkala dilemparkan, yang merupakan salah satu pengecualian Java biasa. Jadi, apakah sebab pengecualian ini? Pertama, kita perlu memahami bahawa iterator yang disediakan oleh rangka kerja koleksi Java adalah stateful. Iaitu ketika melintasi

Apakah punca biasa ArrayStoreException di Java? Apakah punca biasa ArrayStoreException di Java? Jun 25, 2023 am 09:48 AM

Dalam pengaturcaraan Java, tatasusunan ialah struktur data yang penting. Tatasusunan boleh menyimpan berbilang nilai dalam satu pembolehubah, dan yang lebih penting setiap nilai boleh diakses menggunakan indeks. Tetapi semasa bekerja dengan tatasusunan, beberapa pengecualian mungkin berlaku, salah satunya ialah ArrayStoreException. Artikel ini akan membincangkan punca biasa pengecualian ArrayStoreException. 1. Jenis tidak padan Jenis elemen mesti ditentukan apabila tatasusunan dibuat. Apabila kami cuba menyimpan jenis data yang tidak serasi ke dalam tatasusunan, ia akan membuang

Di Jawa, apakah perbezaan antara kelas Pengecualian dan kelas Ralat? Di Jawa, apakah perbezaan antara kelas Pengecualian dan kelas Ralat? Sep 09, 2023 pm 12:05 PM

Kelas Exception dan kelas Ralat adalah kedua-dua subkelas kelas java.lang.Throwable Kita boleh mengendalikan pengecualian masa jalan, tetapi bukan ralat. Pengecualian ialah objek yang mewakili ralat logik yang berlaku semasa runtime, menyebabkan JVM memasuki keadaan "samar-samar". Objek yang dicipta secara automatik oleh JVM untuk mewakili ralat masa jalan ini dipanggil pengecualian. Ralat ialah subkelas kelas Boleh Lempar yang menunjukkan masalah serius yang tidak sepatutnya cuba ditangkap oleh aplikasi yang munasabah. Kebanyakan ralat ini adalah anomali. Jika pengecualian berlaku, kita boleh menggunakan cuba dan tangkap blok untuk mengendalikannya. Jika ralat berlaku yang tidak dapat kami tangani, program akan ditamatkan. Terdapat dua jenis pengecualian, satu ialah CheckedExce

Penyelesaian kepada pengecualian ArrayStoreException dalam Java Penyelesaian kepada pengecualian ArrayStoreException dalam Java Jun 25, 2023 am 08:05 AM

Dalam pembangunan Java, kami sering menggunakan tatasusunan untuk menyimpan satu siri data kerana kemudahan dan kelebihan prestasi tatasusunan. Walau bagaimanapun, dalam proses menggunakan tatasusunan, beberapa pengecualian akan berlaku, dan salah satu pengecualian biasa ialah ArrayStoreException. Pengecualian ini dilemparkan apabila kami menyimpan jenis data yang tidak serasi dalam tatasusunan. Artikel ini akan memperkenalkan apa itu ArrayStoreException, sebab ia berlaku dan cara menyelesaikannya. 1. Arr

Penyelesaian kepada pengecualian UnsupportedEncodingException dalam Java Penyelesaian kepada pengecualian UnsupportedEncodingException dalam Java Jun 25, 2023 am 08:48 AM

UnsupportedEncodingException mungkin berlaku di Java, terutamanya kerana pengekodan tidak disokong. Apabila memproses data teks, selalunya perlu melakukan penukaran pengekodan, iaitu, untuk menukar kandungan satu format pengekodan ke kandungan format pengekodan lain. Jika jenis pengekodan yang digunakan untuk penukaran pengekodan tidak disokong, UnsupportedEncodingException akan dibuang. Artikel ini akan memperkenalkan penyelesaian kepada pengecualian ini. satu,

See all articles