我曾经想到使用自定义的错误处理程序,结果却陷入了一个死胡同。
以下代码会出现这个错误(无论是否使用自定义错误处理程序): Fatal error: Only variables can be passed by reference
function foo(){
$b=array_pop(array("a","b","c"));
return $b;
}
print_r(foo());
以下代码仅在使用自定义错误处理程序时发生 (2048) Only variables should be passed by reference
function foo(){
$a=explode( '/' , 'a/b/c');
$c=array_pop(array_slice($a,-2,1));
return $c;
}
print_r(foo());
第二个让我担心,因为我有很多“简略”的代码。所以,要么放弃使用自定义错误处理程序的好主意(以改进我的日志记录模块),要么扩展所有代码。有更好的想法吗?还有,怎么回事?
更新:
感谢答案,我学到了一些关于php如何处理错误的知识。E_ALL不包括E_STRICT(php 5)的混乱不太好。
除此之外,创建自己的自定义错误处理程序默认启用E_STRICT,这就是问题的根源。
故事的寓意是使用自己的错误处理程序来捕获所有错误,并使用错误常量(E_STRICT、E_USER_WARNING、E_USER_ERROR等)来进行过滤。
至于与变量引用和某些函数相关的“内存损坏问题”,我能说什么呢?双倍的不酷。在我的错误处理程序中忽略E_STRICT(这并不意味着你应该这样做),生活依然继续。