精彩专题推荐:建站之入门课 建站之必修课 建站之关键课 网站价值所在 流量提高专题 css+div 标准 个人网站打造全过程
返回建站学首页
导航:
建站首页 | 网站设计 | 网站开发 | 网站运营 | 网页软件 | 建站指南 | 搜索优化 | 图像处理 | 视频教程 | 书籍教程 | 建站专题
当前位置:首页>网站开发>PHP教程>正文

学习网页技术PHP中错误处理的一些方法


来源:不详 时间:07-09-17 点击: 点击这里收藏本文


  
Exception thrown without a stack frame in Unknown on line 0


  因为error_handler是anto_flush的。

  在一个exception里面不能调用其他的exception。有2条普遍适用的规则,如下:
1:不要在一个Exception里面执行另一个Exception
 2:不要在析构函数里面执行Exception.


  
  restore_exception_handler();是可以保存exception柄的,注意,执行error以后就会有Exception的了。

  最后,加上一个完整的例子:CallError.php  
<?
error_reporting(1048);
class ErrorHandlers extends Exception{
    private $_context = null;
    function  __construct($level,  $string,  $file,  $line,  $context=null){  
        parent::__construct($string,$level);  
        $this->file  =  $file;    
        $this->line  =  $line;  
        $this->_level  =  $level;  
        $this->_context  =  $context;
    }
    function __destruct(){
//        parent::__destruct();
    }
    function Message(){
           $errors = array(
                      E_ERROR          => 'error',
                      E_WARNING        => 'warning',
                      E_PARSE          => 'parsing error',
                      E_NOTICE          => 'notice',
                      E_CORE_ERROR      => 'core error',
                      E_CORE_WARNING    => 'core warning',
                      E_COMPILE_ERROR  => 'compile error',
                      E_COMPILE_WARNING => 'compile warning',
                      E_USER_ERROR      => 'user error',
                      E_USER_WARNING    => 'user warning',
                      E_USER_NOTICE    => 'user notice'
                    );

 
        $str = $errors[parent::getCode()].': '.parent::getMessage().' 在 '.parent::getFile().
       ' 的第 '.parent::getLine()."行\n" ;

        if($this->_level==E_USER_ERROR){
                $str .= ('<hr/>致命错误');
            }
        echo('<pre>');
        echo($str);
        echo('</pre>');

    }
 }
function error_handler($errno,$errstr,$errorfile,$errline,$errtext){
    throw new ErrorHandlers($errno,$errstr,$errorfile,$errline,$errtext);

}
function exception_handler(Exception $e)
{    
   $errors = array(
  E_ERROR          => 'error',
  E_WARNING        => 'warning',
  E_PARSE          => 'parsing error',
  E_NOTICE          => 'notice',
  E_CORE_ERROR      => 'core error',
  E_CORE_WARNING    => 'core warning',
  E_COMPILE_ERROR  => 'compile error',
  E_COMPILE_WARNING => 'compile warning',
  E_USER_ERROR      => 'user error',
  E_USER_WARNING    => 'user warning',
  E_USER_NOTICE    => 'user notice');
       
   echo $errors[$e->getCode()].': '.$e->getMessage().'在'.$e->getFile().
       '的第'.$e->getLine()."行\n";
   echo $e->getMessage();
   die();
}
//
set_error_handler('error_handler');
//restore_error_handler();
set_exception_handler('exception_handler');
//restore_exception_handler();

我肯定是错误
?>


执行结果:
notice: Use of undefined constant 我肯定是错误 - assumed '我肯定是错误'在E:\web\web\php\bi\exception\m.php的第74行 Use of undefined constant 我肯定是错误 - assumed '我肯定是错误'


学习动态网页技术PHP中错误处理的一些方法

  另外,在类中,还可以这样:
    function trigger_error($error_msg, $error_type = E_USER_WARNING)
    {
        trigger_error(" error: $error_msg", $error_type);
    }


  著名的Smarty就是这么做的.
9 7 3 1 2 3 4 8 :

  把此文章收藏到:          
广而告之
文章搜索
  • Google JZxue.Com

关于我们 | 联系我们 | 友情链接 | 网站地图
Copyright © 2005 - 2006 建站学 All rights reserved.