首頁  >  文章  >  後端開發  >  php中錯誤訊息和異常訊息區別

php中錯誤訊息和異常訊息區別

(*-*)浩
(*-*)浩原創
2019-09-06 10:32:492329瀏覽

php中錯誤訊息和異常訊息區別

PHP中什麼是例外:

程式在運作中出現不符合預期的情況,允許發生(你也不想讓他出現不正常的情況)但他是一種不正常的情況,按照我們的正常邏輯本不該出的錯誤,但仍然會出現的錯誤,屬於邏輯和業務流程的錯誤,而不是編譯或語法上的錯誤。

PHP中什麼是錯誤:(推薦學習:PHP程式設計從入門到精通

#屬於php腳本自身的問題,大部分情況是由錯誤的語法,伺服器環境導致,使得編譯器無法通過檢查,甚至無法運作的情況。 warning、notice都是錯誤,只是他們的等級不同而已,而且錯誤是不能被try-catch捕捉的。

上面的說法是有前提條件的:

在PHP中,因為在其他語言中就不能這樣下結論了,也就是說異常和錯誤的說法在不同的語言有不同的說法。

在PHP中任何自身的錯誤或是非正常的程式碼都會當做錯誤對待,並不會以異常的形式拋出,但是也有一些情況會當做異常和錯誤同時拋出(據說是,我沒有找到合適的例子)。

也就是說,你想在資料庫連線失敗的時候自動捕獲異常是行不通的,因為這就不是異常,是錯誤。但是在java中就不一樣了,他會把很多和預期不一致的行為當做異常來進行捕獲。

PHP異常處理很雞肋?

在上面的分析中我們可以看出,PHP並不能主動的拋出異常,但是你可以手動拋出異常,這就很無語了,如果你知道哪裡會出問題,你加入if else解決不就行了嗎,為啥還要手動拋出異常,既然能手動拋出就證明這個不是異常,而是意料之中。

以我的理解,這就是PHP異常處理雞肋的地方(不一定對啊)。所以PHP的異常機制不是那麼的完美,但是使用過框架的同學都知道有這個情況:你在框架中直接寫開頭那段php「自動」捕獲異常的程式碼是可以的,這是為什麼?

看過原始碼的同學都知道框架中都會涉及三個函數:register_shutdown_function,set_error_handler,set_exception_handler三個黑科技,透過這幾個函數我們可以實現PHP假自動捕獲異常和錯誤。

把錯誤以異常的形式拋出(不能完全拋出)

由上面的講解我們知道,php中的錯誤是不能以異常的像是捕獲的,但是我們需要讓他們拋出,已達到擴展try-catch的影響範圍,我們前面講到過set_error_handler() 方法,他是乾嘛用的,他是捕獲錯誤的,所以我們就可以藉助他來吧錯誤捕獲,然後再以異常的形式拋出,ok,試試下面的寫法:

<?php
    set_error_handler(&#39;error&#39;);
    function error($type, $message, $file, $line)
    {
        throw new \Exception($message . &#39;错误当做异常&#39;);
    }

    $num = 0;
    try {
        echo 1/$num;

    } catch (Exception $e){
        echo $e->getMessage();
    }
?>

在php中最好不要簡單的在可能出錯的地方直接拋出異常,在一些框架中,重寫了上述的方法,異常和錯誤可以正常拋出

以上是php中錯誤訊息和異常訊息區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn