我有一个很好的想法,使用一个自定义错误处理程序,这导致我下了一个兔子洞。
以下代码给出(使用和不使用自定义错误处理程序):致命错误:只能通过引用传递变量
function foo(){
$b=array_pop(array("a","b","c"));
return $b;
}
print_r(foo());
以下代码给出(只有自定义错误处理程序):(2048)只有变量应该被引用传递
function foo(){
$a=explode( '/' , 'a/b/c');
$c=array_pop(array_slice($a,-2,1));
return $c;
}
print_r(foo());
第二个担心我,因为我有很多“紧凑”代码。所以,我也可以使用自定义错误处理程序(改进我的日志记录模块)或扩展我的所有代码的明智想法。
任何人有更好的想法?另外,WTF?
更新:
感谢答案,我学到了一些关于PHP如何处理错误的内容。不包括E_STRICT(php 5)的E_ALL的混淆并不酷。
最重要的是,创建自己的自定义错误处理程序可以默认启用E_STRICT,并且在哪里出现问题。
故事的道德是使用自己的错误处理程序来捕获它们,并使用错误常量(E_STRICT,E_USER_WARNING,E_USER_ERROR等)进行过滤。
对于具有变量引用和某些功能的“内存损坏问题”,我可以说什么?双重非冷却我会(这并不意味着你应该)在我的错误处理程序中忽略E_STRICT,并且生命继续下去。