//自定义错误函数
function my_error3($errno,$errmes){
echo "错误号是:".$errno;
}function my_error4($errno,$errmes){
echo "出大事了".$errno;
exit();
}
//指定E_USER_WARNING错误级别的函数
set_error_handler("my_error3",E_USER_WARNING);
$age=700;
if($age>120){
//调用触发器的时候,同时指定错误级别
trigger_error("输入年龄过大",E_USER_WARNING);
//exit();
}
echo "ok";这样的结果是:  错误号是:512ok//自定义错误函数
function my_error3($errno,$errmes){
echo "错误号是:".$errno;
}function my_error4($errno,$errmes){
echo "出大事了".$errno;
exit();
}
//指定E_USER_WARNING错误级别的函数
set_error_handler("my_error3",E_USER_WARNING);
set_error_handler("my_error4",E_USER_ERROR);$age=700;
if($age>120){
//调用触发器的时候,同时指定错误级别
trigger_error("输入年龄过大",E_USER_WARNING);
//exit();
}
echo "ok";
这个就是在set_error_handler("my_error3",E_USER_WARNING);下面加了一个函数
set_error_handler("my_error4",E_USER_ERROR);
于是结果就变成了:
Warning: 输入年龄过大 in D:\WWW\error\error4.php on line 18ok        
我想问的是:   我加了那段函数对我的触发器trigger_error("输入年龄过大",E_USER_WARNING);这段函数毫无影响啊应该,我触发器设置的级别是E_USER_WARNING,就应该是继续调用my_error3这个函数啊,答案应该依旧是   错误号是:512ok 啊
不懂哦,大神帮帮忙!谢谢啦~~~~

解决方案 »

  1.   

    set_error_handler 只能绑定一个回调函数
    多次 set_error_handler,只有最后一次的有效
    你的教程都把他称作触发器了,难道都不强调这一点?
      

  2.   

    function my_error($errno,$errmes){
    $err_info="错误信息是:".$errno.$errmes;
    echo $err_info;
    }function my_error3($errno,$errmes){
    echo "大事不好了";
    exit();
    }set_error_handler("my_error3",E_ERROR);
    set_error_handler("my_error",E_WARNING);$age=700;
    if($age>120){
    trigger_error("输入年龄过大",E_ERROR);
    }按您的意思我这段函数只有set_error_handler("my_error",E_WARNING);这段是有效的,那我下面定义触发器错误级别是E_ERROR,那就不会去调用SET_ERROR_HANDLER函数了,就会去调用系统内定的错误处理函数了,那为什么结果是:
    错误信息是:2Invalid error type specified                。。
      

  3.   

    因为trigger_error只能触发E_USER_XXX类型的
      

  4.   

    那我trigger_error("输入年龄过大",E_ERROR);这一段无法触发E_ERROR这种类型的,那不是会去触发默认的那个E_USER_NOTICE,就回去调用系统默认的错误处理函数,为什么结果却是调用了set_error_handler("my_error",E_WARNING);
    这断函数呢!
      

  5.   

    麻烦能详解下吗,不是很懂啊,意思是trigger_error里面指定的错误级别不在三种里面,也是会默认去调用set_ERROR_handler里面的函数吗。
      

  6.   

    个人理解:当调用trigger_error($error_msg, $error_type)时,如果$error_type不是E_USER_XXX系列的,则调用失败,同时产生E_WARNING错误,如果你此前恰巧用set_error_handler(‘my_error_handler’, E_WARNING)设置了错误处理程序,此时my_error_handler()会被调用,这里可能造成混淆,误以为trigger_error()调用成功了。
      

  7.   

    别胡扯,真懂了吗?
    做一个测试(去掉花里胡哨的东西,只观察函数调用情况)function my_error() {
      echo __FUNCTION__;
    }
    function my_error4() {
      echo __FUNCTION__;
    }
    set_error_handler("my_error", E_USER_WARNING);
    //set_error_handler("my_error4",E_USER_ERROR);trigger_error("输入年龄过大", E_USER_WARNING);
    trigger_error("输入年龄过大", E_USER_ERROR);my_error
    Fatal error: 输入年龄过大 in D:\AMP\web\ide_tmp.php on line 12
    去掉第 8 行的注释,得Warning: 输入年龄过大 in D:\AMP\web\ide_tmp.php on line 11
    my_error4
    由此可知,set_error_handler 只能设置一个回调函数
    回调函数只处理 error_types 指定的错误级别(默认是 E_ALL )