91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP7中的錯誤和異常有哪些

發布時間:2021-10-15 10:50:18 來源:億速云 閱讀:101 作者:iii 欄目:編程語言

本篇內容介紹了“PHP7中的錯誤和異常有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

PHP語言簡單的原因之一就是PHP的錯誤處理機制,隨著PHP語言越來越現代化,也出現了異常,這篇博文就是簡單說下錯誤和異常,以便系統的理解,另外對于任何一種語言來說,異常的存在是具備共性的,所以學習一門語言理解異常機制是必不可少的.

什么是錯誤
當PHP語言遇到異常的情況(比如數據庫連接不上或者函數參數傳遞錯誤),則會報出一些錯誤,錯誤可以分為多種類型,除了E_ERROR和E_CORE_ERROR錯誤,其它錯誤不會終止程序運行.
PHP讓人覺得簡單的原因就在于程序不會頻繁的報錯,給人一種編寫流暢和方便的錯覺.
也正因為這個原因PHP程序的嚴謹性和準確性差了不少,比如mysql_fetch_array查詢遇到網絡錯誤返回FALSE的時候(程序沒有終止運行),假如調用程序認為查詢沒有匹配的數據,則這個程序本質是錯誤的.
通過 php.ini的指令 error_reporting或者動態調用 error_reporting()函數我們可以選擇報告什么類型的錯誤,通過 display_errors指令則可以控制錯誤是否在線輸出.而 error_log指令可以控制將錯誤輸出到日志中.

如何正確使用錯誤
不管是系統函數或者是自定義函數,假如內部遇到錯誤,如何告之調用者呢?一般是通過函數返回 TRUE或者 FALSE來表明.這種處理方式有幾個弊端:
● 調用者只知道發生了錯誤,但是返回的錯誤信息太少,且缺乏錯誤類型的說明
● 程序處理邏輯和錯誤處理混雜在一塊,產生的代碼會非常的不清晰.
一個小技巧: error_get_last()函數會返回最近錯誤產生的具體原因.

最佳實踐:
● set_error_handler()函數來托管所有的錯誤
● trigger_error()函數可以觸發自定義錯誤,可以用來在函數中代替 return 語句
● 將所有的錯誤輸出到日志中,同時定義錯誤類型
● 對用戶顯示錯誤,比如將錯誤以一種更友好的方式返回給用戶
● 生產環境下 display_errors指令要關閉,開發環境則該指令打開
老牌的PHP框架 Codeigniter處理錯誤的方式可以借鑒

`function _error_handler($severity, $message, $filepath, $line)
{
    $is_error = (((E_ERROR | E_COMPILE_ERROR | E_CORE_ERROR | E_USER_ERROR) & $severity) === $severity);
    //輸出500錯誤HTTP狀態碼
    if ($is_error) {
        set_status_header(500);
    }
    //對于不需要處理的錯誤則直接中斷
    if (($severity & error_reporting()) !== $severity) {
        return;
    }
    //將所有的錯誤記錄到日志中
    $_error =& load_class('Exceptions', 'core');
    $_error->log_exception($severity, $message, $filepath, $line);
    //友好的輸出所有錯誤
    if (str_ireplace(array('off', 'none', 'no', 'false', 'null'), '', ini_get('display_errors'))){
        $_error->show_php_error($severity, $message, $filepath, $line);
    }
    //假如致命錯誤則直接退出
    if ($is_error) {
        exit(1);   
    }
}
set_error_handler('_error_handler');`

什么是異常
異常也是一個錯誤,它具備以下的特點:
● 異常可以自定義,SPL提供了很多類型的異常,你也可以擴展它
● 異常最常規的動作就是捕獲,這樣開發者就能根據具體的錯誤進行后續處理.比如可以根據異常的上下文給用戶返回友好的提示.或者繼續拋出一個異常,讓上游的程序去處理.假如還是沒有捕獲異常,那么程序就直接終止了.
● 異常另外個動作就是拋出,假如通過函數編寫業務邏輯,遇到意外的情況,可以直接扔出一個異常.
● 異常可以被代碼一層一層捕獲,假如最外層的程序還沒有捕獲,則代碼直接終止運行
● PHP中的異常假如不能捕獲,則作為致命錯誤寫入到系統錯誤日志中
通過直觀的代碼來說明下:

`function inverse($x)
{
    if ($x < 10) {
        throw new Exception('x<10');
    } elseif ($x >= 10 and $x < 100) {
        throw new LogicException('x>=10 and x<100');
    }
    return $x;
}
try {
    echo inverse(2)."\n";
} catch (LogicException $e) {
    echo 'Caught LogicException: ', $e->getMessage(), "\n";
} catch (Exception $e) {
    echo 'Caught Exception: ', $e->getMessage(), "\n";
    throw $e;
}`

異常的最佳實踐
● 異常可以讓代碼更加清晰,讓開發者專注于業務邏輯的編寫.
● 構建可擴展的異常是非常有技術性的,難道SPL異常還做的不夠嗎?
● 捕獲異常應該僅僅捕獲本層能處理的異常,對于不能處理的異常則讓上游的代碼處理.

PHP7中的異常
PHP7鼓勵使用異常來代替錯誤,但是不可能一下子推翻錯誤處理機制,需要兼容,所以只能慢慢過渡.
但是可以通過變通的方式來統一使用異常
● Error異常
PHP中定義了一個 Error異常,注意這個異常和 Exception是并列的,
當打開嚴格模式的時候,PHP7中很多的錯誤是被 Error異常拋出的.這樣就能統一使用異常了.

`declare (strict_types = 1);
function add(int $a, int $b)
{
    return $a + $b;
}
try {
    echo add("3", "4");
}
catch (TypeError $e) { //TypeError繼承自Error
    echo $e->getMessage();
}`

● ErrorException
ErrorException繼承自 Exception.
我們可以通過 set_error_handler()函數將所有的錯誤轉換成 ErrorException.這樣就能愉快的統一使用異常了.

“PHP7中的錯誤和異常有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

赣州市| 镇沅| 镇赉县| 交城县| 清河县| 山丹县| 临沂市| 缙云县| 渝北区| 密山市| 社旗县| 忻城县| 伊宁县| 临漳县| 乌兰浩特市| 耒阳市| 冕宁县| 江川县| 延长县| 天全县| 安乡县| 余庆县| 南岸区| 建宁县| 同江市| 古交市| 乌鲁木齐县| 汉阴县| 河源市| 东台市| 柳林县| 永定县| 贵德县| 汝州市| 吐鲁番市| 老河口市| 营口市| 英德市| 石景山区| 南城县| 锦屏县|