PHP異常處理和錯誤處理方法分享

來源:互聯網
上載者:User
PHP裡的異常:是屬於邏輯和商務程序的一種中斷,PHP裡的錯誤:自身問題,非法文法或者環境問題,編譯器無法通過檢查,無法運行,本文主要和大家分享PHP異常處理和錯誤處理方法,希望能協助到大家。

如何使用異常處理機制

除零異常在php和java裡實現的區別

<?php/** * Created by PhpStorm. * User: wangkai * Date: 2018/3/6 * Time: 上午8:53 */$a=null;try{    $a=5/0;    echo $a;}catch (exception $e){    $e->getMessage();    $a=-1;}echo $a;

運行結果


java實現

public class ExcepetionTry{    public static void tp() throws ArithmeticException{        int a;        a=5/0;        system.out.println("運算結果:"+a);    }    public static void main(String[] args){        int a;        try{         a=5/0;         System.out.println("運算結果"+a);        }catch(ArithmeticException e){            e.printStackTrace();        }finally{            a=-1;            System.out.println("運算結果"+a);        }        try{            ExceptionTry.tp();        }catch(Exception e){            System.out.println("異常被捕獲");        }        }    }}

在PHP裡,認為這是一個錯誤,直接觸發錯誤,不會自動拋出異常,php只有主動throw後,才能捕獲異常

在java裡,認為除零屬於ArithmeticException,會對其進行捕獲,並對異常進行處理

簡單點說,就是php把所有不正常的情況被視做了錯誤,使用if else捕獲異常,php的內建異常類有pdoexception,reflection exception

java裡異常是唯一的錯誤報表方式

php的異常應該怎麼用

1 對程式的悲觀預測

例如高並發條件下的死結問題,悲觀的拋出問題

2 程式的需求和對業務的關注

上傳檔案和儲存到資料庫,保證業務資料的一致性

兩種異常捕獲方式

第一種異常發生時就立即捕獲

<?php try{//可能出錯的程式碼片段if(檔案上傳不成功)throw(上傳異常)if(插入資料庫不成功)throw(資料庫操作異常)}catch(異常){必須的補救措施,如刪除檔案,刪除資料庫插入記錄}}

第二種是分散拋異常集中捕獲

<?php上傳{if(檔案上傳不成功)throw (上傳異常)if(插入資料不成功)throw (資料庫操作異常)//其他代碼try{上傳,其他;}catch(上傳異常){必須的補救措施,刪除檔案,刪除資料插入記錄}catch(其他異常){記錄log}

3 語言層級的健壯性

1.6.2 怎樣看PHP的異常

PHP的異常機制是不足的,php需要關注發生了哪些異常,java則關注異常的捕獲和隨後的補救

最好的辦法就是結合php中的錯誤處理主動拋出異常

1.6.3 PHP中的錯誤層級

php錯誤:會使指令碼運行不正常的情況

錯誤以下幾類:

deprecated最低層級的錯誤,不推薦,不建議,過時的函數或文法造成的

notice 文法中存在不當的地方 使用變數但是未定義,資料索引是字元沒有加引號,php會視其為一個常量,查常量表

找不到,再視為變狼

warning是層級比較高的錯誤,文法中出現不恰當的情況,比如函數參數不匹配,這種錯誤得得到預期結果

fetal error 致命錯誤,直接導致php流程終結,後面代碼不執行

prase error 文法解析錯誤,屬於語法檢查的階段的錯誤

開啟錯誤顯示,php.ini檔案設定

error_reporting=E_ALL|E_STRICT

display_errors=On

在代碼品質或者環境不可控時,使用error_reporting(0)或者函數前面加@

1.6.4 PHP中的錯誤處理機制

php裡有一套錯誤處理機制,可以使用set_error_handler接管PHP錯誤處理

set_error_handler(error_function,error_types)

error_function 規定發生錯誤時啟動並執行函數,必須

error_types 規定在哪個錯誤報表層級會顯示使用者定義的錯誤,可選

<?php/** * Created by PhpStorm. * User: wangkai * Date: 2018/3/6 * Time: 上午10:03 */ // 使用者定義的錯誤處理函數 function myErrorHandler($errno, $errstr, $errfile, $errline) {     echo "<b>Custom error:</b> [$errno] $errstr<br>";     echo " Error on line $errline in $errfile<br>"; } // 設定使用者定義的錯誤處理函數 set_error_handler("myErrorHandler"); $a=array('o'=>2,4,5,6); echo $a[o]; ?>

主動拋出異常實現


function customError($errno,$errstr,$errfile,$errline){throw new Exception($level.$errstr);}set_error_handler("customeError");try{$a=5/0;}catch(Exception $e){echo "錯誤資訊:".$e->getMessage();}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.