首頁  >  文章  >  後端開發  >  PHP異常處理和錯誤處理方法分享

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

小云云
小云云原創
2018-03-07 09:47:222534瀏覽

 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的異常報告方式


        php的異常應該用


#             1 對程式的悲觀預言


                     2 程序的需求及對業務的關注


                       上傳檔案與儲存至資料庫,以確保商業資料的一致性為「            第一種異常發生時就立即捕獲

<?php 
try{
//可能出错的代码段
if(文件上传不成功)throw(上传异常)
if(插入数据库不成功)throw(数据库操作异常)
}catch(异常){
必须的补救措施,如删除文件,删除数据库插入记录
}
}

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

<?php
上传{
if(文件上传不成功)throw (上传异常)
if(插入数据不成功)throw (数据库操作异常)
//其他代码
try{
上传,其他;}
catch(上传异常){
必须的补救措施,删除文件,删除数据插入记录
}catch(其他异常){
记录log
}

     .2 怎麼看PHP的異常

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


       最好的方法是結合php中的錯誤處理主動拋出例外

##1.6.3 PHP中的錯誤等級


        php錯誤:會使腳本運作不正常的狀況

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


            找不到,再視為變狼


            warning是較高等級的錯誤,文法上出現不恰當的狀況,例如函數參數不匹配,此錯誤得得到預期結果

    直接導致php流程終結,後面程式碼不執行

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

     指定

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

1.6.4 PHP中的錯誤處理機制

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

            set_error_handler(error_function,error_types)

         

             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(&#39;o&#39;=>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();
}

相关推荐:

什么是PHP异常处理

PHP异常处理器的自定义

使用php异常处理类Exception的例子

以上是PHP異常處理和錯誤處理方法分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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