我有一个基于Zend Framwork的应用程序。在一个模型中,我从另一个模型中调用一个方法。当我调用这种方法时,我使用try-cath块来处理奇怪的情况。 型号1。
try {
$result = Module_Model2_Name->method();
} catch (Exception $e) {
// Do Something
}
如果我们在try块中找到throw,那么Catch应该可以正常工作。但我不知道我的申请的行为。如果它是Model2方法中的某个应用程序错误,则应抛出异常。 在Model2的方法中,我会做下一件事,但它不起作用:
set_error_handler(create_function('$m = "Error"','throw new Exception($m);'), E_ALL);
如何在每个PHP应用程序错误上抛出异常? 非常感谢你。抱歉我的英文。
答案 0 :(得分:8)
对我来说看起来不错(经过测试)。
<?php
set_error_handler(create_function('$nr, $msg = "Error"','throw new Exception($m);'), E_ALL);
try{
foreach($notHere as $var){}
}
catch(Exception $e){
var_dump($e);
}
?>
请注意:
以下错误类型不能 使用用户定义的函数处理: E_ERROR,E_PARSE,E_CORE_ERROR, E_CORE_WARNING,E_COMPILE_ERROR, E_COMPILE_WARNING,以及大部分内容 E_STRICT在文件中引发了 调用set_error_handler()。
取自PHP手册。
答案 1 :(得分:4)
我的版本:
function custom_error_handler($errno, $errstr, $errfile, $errline, $errcontext)
{
$constants = get_defined_constants(1);
$eName = 'Unknown error type';
foreach ($constants['Core'] as $key => $value) {
if (substr($key, 0, 2) == 'E_' && $errno == $value) {
$eName = $key;
break;
}
}
$msg = $eName . ': ' . $errstr . ' in ' . $errfile . ', line ' . $errline;
throw new Exception($msg);
}
set_error_handler('custom_error_handler', E_ALL);