【发布时间】:2011-02-27 09:32:33
【问题描述】:
我有一个使用自定义错误处理程序的好主意,这让我陷入了困境。
以下代码给出(有和没有自定义错误处理程序):致命错误:只能通过引用传递变量
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,然后生活继续。
【问题讨论】:
-
$b=current(array_reverse(array("a","b","c"))); // 是的,这很愚蠢,但它确实有效 :)
标签: php error-handling variables reference