php異常處理

PHP具備不少異常處理類,其中Exception是全部異常處理的基類。
Exception具備幾個基本屬性與方法,其中包括了:
message 異常消息內容
code 異常代碼
file 拋出異常的文件名
line 拋出異常在該文件的行數
其中經常使用的方法有:
getTrace 獲取異常追蹤信息
getTraceAsString 獲取異常追蹤信息的字符串
getMessage 獲取出錯信息

php

 異常使用場景函數

一、主要處理各類可預見,不可預見的狀況,統一返回,沒有使用 try...catch 接收的異常直接跳進設置的方法.net


2. 但願業務代碼中不充斥一大堆打印調試的處理,就會用異常機制。或者是一些業務上須要定義一些異常。3d

若是異常出現,沒有捕獲,異常以前的代碼能夠繼續執行,以後的腳本將不能執行調試

 

 

一、不會捕獲語法錯誤code

二、try catch 只能捕獲拋出異常orm

三、父類能夠捕獲子類拋出的異常blog

實驗1、不一樣子類是否能夠互相捕獲字符串

class ExceptionA extends Exception {

}


class ExceptionB extends Exception {

}

function try_catch($type) {

    switch ($type) {
        case 1:
            throw new ExceptionA('a exception');
            break;
        case 2:
            throw new ExceptionB('b exception');
            break;
    }
}

try {
    try_catch(1);
} catch (ExceptionB $e) {
    $e->getMessage();
}

 

執行後拋出上面錯誤,不一樣子類不能捕獲get

 

實驗2、父類是否能夠捕獲子類異常

<?php
/**
 * Created by PhpStorm.
 * User: ganga
 * Date: 2019/3/9
 * Time: 上午10:57
 */

class ExceptionA extends Exception {

}


class ExceptionB extends Exception {

}

function try_catch($type) {

    switch ($type) {
        case 1:
            throw new ExceptionA('a exception');
            break;
        case 2:
            throw new ExceptionB('b exception');
            break;
    }
}

try {
    try_catch(1);
} catch (Exception $e) {
    echo $e->getMessage();
}

 

結果顯示父類能夠捕獲子類

 

實驗3、多個try catch進行捕獲多個不一樣異常

class ExceptionA extends Exception {

}


class ExceptionB extends Exception {

}

function try_catch($type) {

    switch ($type) {
        case 1:
            throw new ExceptionA('a exception');
            break;
        case 2:
            throw new ExceptionB('b exception');
            break;
    }
}

try {
    try_catch(2);
} catch (ExceptionA $e) {
    echo $e->getMessage();
} catch (ExceptionB $e) {
    echo $e->getMessage();
}

 顯示結果

能夠利用多個try catch 進行捕獲,針對不一樣異常進行不一樣處理

 

 

 

實驗4、異常嵌套

class ExceptionA extends Exception {
}


class ExceptionB extends Exception {
}

function try_catch($type) {
    switch ($type) {
        case 1:
            throw new ExceptionA('a exception');
            break;
        case 2:
            throw new ExceptionB('b exception');
            break;
    }
}

try {
    try {
        try_catch(2);
    } catch (ExceptionA $e) {
        echo $e->getMessage();
    }
} catch (ExceptionB $e) {
    echo $e->getMessage();
}

 實驗結果證實、

    若是在內層 "try" 代碼塊中異常沒有被捕獲,則它將在外層級上查找 catch 代碼塊去捕獲。

 

實驗5、set_exception_handler() 能夠在定義異常處理器,處理全部未捕獲異常的用戶定義函數。

 

class ExceptionA extends Exception {
}


class ExceptionB extends Exception {
}

function setException($exception) {
    echo 'execption:' . $exception->getMessage() . ':' . $exception->getCode();
}
function try_catch($type) {
    switch ($type) {
        case 1:
            throw new ExceptionA('a exception');
            break;
        case 2:
            throw new ExceptionB('b exception');
            break;
    }
}

set_exception_handler('setException');

throw new Exception('set execption');
相關文章
相關標籤/搜索