我一直在编写一个小型PHP框架,其中我一直在使用set_error_handler
以更有用的方式显示错误,这是任何框架的一个非常典型的特性。
我刚刚完成了一项功能,通过使用传递给错误处理程序的文件和行号,我将该行以及它上面和下面的行加载到视图中以准确显示问题所在:
这很好用,但是现在它实现了我已经注意到这完全没有用了,因为标记的行是通过trigger_error
触发错误的行而不是实际的代码< em>导致错误。
有没有办法引用导致错误的行?如果我可以找出失败的函数调用的地方,那将是最理想的。例如,我想在这种情况下被引用line 7
,而不是像我现在那样line 4
:
1. function test($value)
2. {
3. if($value < 5)
4. trigger_error("I expected more.");
5. }
6.
7. test(3);
我很乐意修改我的框架中使用trigger_error
的方法,如果这有帮助的话(例如,如果有办法知道函数从其自身内部调用的地方(非常肯定没有),沿着这些路线。)
如果需要,我很乐意使用set_error_handler
和trigger_error
的替代方法。
答案 0 :(得分:2)
在这种情况下,您可以使用debug_backtrace
,但您需要根据需要调整要跟踪的错误行。例如,在这种情况下:
<?php
set_error_handler('myErrorHandler');
function test($value)
{
if($value < 5)
trigger_error("I expected more.");
}
test(3);
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
$db = debug_backtrace();
for ($i=0, $c = count($db); $i<$c; ++$i) {
if ($db[$i]['function'] == 'trigger_error') {
echo $db[$i+1]['line'];
break;
}
}
}
会给你11
答案 1 :(得分:0)
也许你可以查看debug_backtrace()。