PHP之错误处理详解-php教程

资源魔 35 0

PHP之谬误解决详解

谬误陈诉

  PHP顺序的谬误发作普通归属于下列三个畛域:

  一、语法谬误

  语法谬误最多见,而且也容易修复。如:代码中脱漏一个分号。这种谬误会阻止剧本的执行

  二、运转时谬误

  这类谬误普通没有会阻止PHP剧本的执行,但会阻止以后要做的事件。输入一条谬误,但php剧本持续执行

  三、逻辑谬误

  这类谬误最费事,既没有阻止剧本执行,也没有输入谬误音讯

  [留意]若将php.ini设置装备摆设文件中的display_errors从默许的on设置为off,将没有显示任何谬误

  正在PHP剧本中可挪用ini_set()函数,静态设置php.ini设置装备摆设文件

ini_set("display_errors","On"); //显示一切谬误信息

301.jpg

谬误级别

302.jpg

  实际上,表格中的13个谬误类型能够分为3类:留意级别、正告级别以及谬误级别。普通地,正在开发进程中,疏忽留意级此外谬误

<?php
 getType($a);//不决义变量,留意级别
 echo "1111111111111111<br>";    getType();//未传入参数,正告级别
 echo "222222222222222222222<br>";
 getType3();//函数名谬误,谬误级别
 echo "333333333333333333333<br>";
 ?>

303.jpg

谬误解决

一、第一种谬误解决办法是修正设置装备摆设文件

  谬误级别默许为提醒一切级此外谬误:error_reporting = E_ALL

  把error_reporting = E_ALL改成error_reporting = E_ALL & ~E_NOTICE 示意没有提醒留意级此外谬误。而后,重启效劳失效

error_reporting = E_ALL & ~E_NOTICE 抛出任何非留意的谬误,默许值error_reporting = E_ERROR | E_PARSE | E_CORE_ERROR 只思考致命的运转时谬误、新解析谬误以及外围谬误error_reporting = E_ALL & ~(E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE) 陈诉除了用户招致的谬误以外的一切谬误

306.jpg

二、第二种谬误解决办法是应用谬误解决函数

  正在PHP剧本能够经过error_reporting( )函数静态设置谬误陈诉级别

<?php
    error_reporting(E_ALL & ~E_NOTICE);
    getType($a);//留意级别
    echo "1111111111111111<br>";
    getType();//正告级别
    echo "222222222222222222222<br>";
    getType3();//谬误级别
    echo "333333333333333333333<br>";?>

308.jpg

自界说谬误解决

  自界说谬误陈诉的解决形式,能够齐全绕过规范的PHP谬误解决函数,这样就能够按本人界说的格局打印谬误陈诉,或扭转谬误陈诉打印的地位,如下几种状况能够思考自界说谬误解决:一、记下谬误的信息,实时发现一些消费环境呈现的成绩;二、屏蔽谬误;三、管制谬误的输入; 四、作为调试对象

  应用set_error_handler()函数来设置用户自界说谬误解决

<?php
    //error_reporting(E_ALL & ~E_NOTICE);
    //正在php中注册一个函数来解决谬误陈诉,代替默许的形式
    set_error_handler("myerrorfun");    
    $mess = "";    //自界说谬误陈诉解决函数
    function myerrorfun($error_type, $error_message, $error_file, $error_line) {
        global $mess;        
        $mess.="发作谬误级别为{$error_type}类型, 谬误音讯<b>{$error_message}</b>, 正在文件<font >{$error_file}</font>中, 第{$error_line}行。<br>";    
    }    getType($a);    
    echo "1111111111111111<br>";    
    getType();    
    echo "222222222222222222222<br>";    
    echo "--------------------------------------------<br>";    
    echo $mess;
    ?>



谬误日记

  普通地,顺序城市保留谬误日记,用来记载顺序运转时的谬误信息。且谬误日记都有其默许的存储地位。关于谬误信息以及谬误日记的地位,咱们均可以进行修正

  正在PHP.ini设置装备摆设文件中,有如下几项能够对谬误日记进行设置

error_reporting = E_ALL //将向PHP发送每一个谬误display_errors=Off //没有显示谬误陈诉log_errors=On //决议日记语句记载的地位log_errors_max_log=1024 //每一个日记项的最年夜长度error_log=G:/myerror.log //指定谬误写进的文件

  正在php文件中,咱们能够应用函数error_log()来自界说谬误信息

<?phperror_log("登录失败了!");?>

309.jpg

异样解决

  异样(Exception)解决用于正在指定的谬误发作时扭转剧本的失常流程,是PHP5中的一个新的首要特点。异样解决是一种可扩大、易保护的谬误解决机制,并提供了一种新的面向工具的谬误解决形式

try{
应用try去蕴含可能会发作异样的代码
一旦呈现异样try进行捕捉异样,交给catch解决。
抛出异样语句:throw 异样工具。
}catch(异样工具参数){
正在这里做异样解决。
}[catch(。,,){
.. .. ..
}]

<?php
    try {        $error = 'Always throw this error';        throw new Exception($error);   
        //创立一个异样工具,经过throw语句抛出
        echo 'Never executed';         
        //从这里开端,try代码块内的代码将没有会再被执行
    } catch (Exception $e) {        echo ‘Caught exception: ’.$e->getMessage()."
"; //输入捕捉的异样音讯
    }    echo 'Hello World'; //顺序不解体持续向下执行?>

自界说异样

  用户能够用自界说的异样解决类来扩大PHP内置的异样解决类。如下的代码阐明了正在内置的异样解决类中,哪些属性以及办法正在子类中是可拜访以及可承继的

<?phpclass Exception{
    protected $message = 'Unknown exception';   // 异样信息
    private   $string;                          // __toString cache
    protected $code = 0;                        // 用户自界说异样代码
    protected $file;                            // 发作异样的文件名
    protected $line;                            // 发作异样的代码行号
    private   $trace;                           // backtrace
    private   $previous;                        // previous exception if nested exception
    public function __construct($message = null, $code = 0, Exception $previous = null);
    final private function __clone();           // Inhibits cloning of exceptions.
    final public  function getMessage();        // 前往异样信息
    final public  function getCode();           // 前往异样代码
    final public  function getFile();           // 前往发作异样的文件名
    final public  function getLine();           // 前往发作异样的代码行号
    final public  function getTrace();          // backtrace() 数组
    final public  function getPrevious();       // 以前的 exception
    final public  function getTraceAsString();  // 已格成化成字符串的 getTrace() 信息
    // Overrideable
    public function __toString();               // 可输入的字符串}?>

  [留意]假如应用自界说的类来扩大内置异样解决类,而且要从新界说结构函数的话,倡议同时挪用parent::__construct()来反省一切的变量能否已被赋值。当工具要输入字符串的时分,能够重载__toString() 并自界说输入的款式

<?php
    /* 自界说的一个异样解决类,但必需是扩大内异样解决类的子类 */
    class MyException extends Exception{
        //重界说结构器使第一个参数 message 变成必需被指定的属性
        public function __construct($message, $code=0){
            //能够正在这里界说一些本人的代码
         //倡议同时挪用 parent::construct()来反省一切的变量能否已被赋值
            parent::__construct($message, $code);
        }    
        public function __toString() {        
          //重写父类办法,自界说字符串输入的款式
          return __CLASS__.":[".$this->code."]:".$this->message."<br>";
        }        public function customFunction() {    
             //为这个异样自界说一个解决办法
             echo "按自界说的办法解决呈现的这个类型的异样<br>";
        }
    }?>
<?php
   try { //应用自界说的异样类捕捉一个异样,并解决异样
        $error = '容许抛出这个谬误';       
        throw new MyException($error);    
             //创立一个自界说的异样类工具,经过throw语句抛出
        echo 'Never executed'; 
            //从这里开端,try代码块内的代码将没有会再被执行
    } catch (MyException $e) {        //捕捉自界说的异样工具
        echo '捕捉异样: '.$e;        //输入捕捉的异样音讯
        $e->customFunction();  //经过自界说的异样工具中的办法解决异样
    }    echo '你好呀';              //顺序不解体持续向下执行?>

相干参考:php教程

以上就是PHP之谬误解决详解的具体内容,更多请存眷资源魔其它相干文章!

标签: php php开发教程 php开发资料 php开发自学

抱歉,评论功能暂时关闭!