php提示行号,在php中使用trigger_错误时如何获得正确的行号?

我想我会把我的两分钱投入到这个花盆中,讨论一下我通常使用什么,无论是按原样使用还是使用小的定制,用于我构建的PHP库,而其他开发人员经常使用这些库。

我将程序执行过程中可能出现的错误细分为两类:那些是错误编程的结果,以及那些由于用户错误或一些外部因素而发生的错误。对于前者,我将trigger_error与e_user_error结合使用,后者是一个异常,特别是一个包异常,然后由库中的所有其他异常继承。

开发错误的一个例子是在一个期望是字符串(V7之前)的参数中传递一个整数,或者访问一个不存在的类的方法或属性。(您可以在这里使用自己的开发人员想象力。)显然,另一个开发人员不会在意错误是在“get”或“set”语句或其他一些神奇构造的内部深处生成的,而是希望知道错误的具体位置。让我们面对现实吧……开发人员不想涉过回溯。

因此,我用来定位错误消息的方法很简单:

function localize_error_msg($msg, $level) {

$level = (int)$level;

$backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, $level + 1)[$level];

return $msg . " in " . $backtrace['file'] . " on line " . $backtrace['line'];

}

我传入的回溯级别取决于所使用的构造,通常是1或2,其余的都是不言而喻的。

为了防止“i n file on line n”的重复序列,我添加了这个错误处理程序:

set_error_handler(function($errno, $errstr, $errfile, $errline) {

if (preg_match('/on line \d+$/', $errstr) === 1)

die($errstr);

else return false;

}, E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE);

同样,我喜欢保持简单。可以说,错误消息的本地化应该发生在处理程序中,但是之后,您必须能够传递深度,这在处理程序中又增加了两个层次,并且,在这之后会变得混乱。

快乐小径!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值