PHP中的異常和錯誤
不同的語言,異常和錯誤不同。在其他語言中的異常很多在PHP中屬於錯誤,不能被自動丟擲。所以要手動丟擲,但這時候會感覺很雞肋。but,有set_error_handler()、register_shutdown_function()兩大結合可以捕捉所有型別錯誤的方法和set_exception_handler()捕捉異常的方法
錯誤觸發器:trigger_error();
錯誤和異常可以結合用,(本來PHP中大多數也是屬於錯誤),觸發錯誤捕獲錯誤,捕獲後丟擲異常,捕獲異常。這就相當於其他語言的自動捕獲異常了
###
為什麼register_shutdown_function()不能觸發,為什麼框架中是可以的?其實原因很簡單,只在parse-time出錯時是不會呼叫本函式的。只有在run-time出錯的時候,才會呼叫本函式,我的理解是語法檢查器前沒有執行register_shutdown_function()去把需要註冊的函式放到呼叫的堆疊中,所以就根本不會執行。那框架中為什麼任何錯誤都能進入到register_shutdown_function()中呢,其實在框架中一般會有統一的入口index.php,然後每個類庫檔案都會通過include ** 的方式載入到index.php中,相當與所有的程式都會在index.php中聚集,同樣,你寫的具有語法錯誤的檔案也會被引入到入口檔案中,這樣的話,呼叫框架,執行index.php,index.php本身並沒有語法錯誤,也就不會產生parse-time錯誤,而是 include 檔案出錯了,是run-time的時候出錯了,所以框架執行完之後就會觸發register_shutdown_function();
https://www.cnblogs.com/zyf-zhaoyafei/p/6928149.html
###
https://blog.csdn.net/the_victory/article/details/51481941
錯誤不僅可以指定記錄錯誤報告日誌,PHP還可以記錄錯誤到作業系統(Linux和Windows都可以)