php - 只有变量可以通过引用传递

标签 php error-handling variables reference

我有一个聪明的想法,那就是使用自定义错误处理程序,这让我陷入了困境。

以下代码给出(有和没有自定义错误处理程序): fatal error :只能通过引用传递变量

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());

第二个问题让我很担心,因为我有很多“紧凑”代码。因此,我要么放弃使用自定义错误处理程序(以改进我的日志记录模块)的好主意,要么扩展我的所有代码。

谁有更好的想法?还有,WTF?

更新:

多亏了这些回答,我才了解到 php 如何处理错误。 E_ALL 不包括 E_STRICT (php 5) 的混淆并不酷。

最重要的是,创建您自己的自定义错误处理程序默认启用 E_STRICT,这就是问题开始的地方。

故事的寓意是使用您自己的错误处理程序来捕获所有错误并使用错误常量(E_STRICT、E_USER_WARNING、E_USER_ERROR 等)进行过滤。

至于变量引用和某些函数的“内存损坏问题”,我能说什么?双重不酷。我将(这并不意味着你应该)忽略我的错误处理程序中的 E_STRICT,生活继续。

最佳答案

array_pop() 尝试更改作为参数传递的值。现在在您的第二个示例中,这是 array_slice() 的返回值。在引擎术语中,这是一个“临时值”,这样的值不能通过引用传递。你需要的是一个临时变量:

function foo(){
    $a=explode( '/' , 'a/b/c');
    $b=array_slice($a,-2,1);
    $c=array_pop($b);
    return $c;
}
print_r(foo());

然后可以将对 $b 的引用传递给 array_pop()。参见 http://php.net/references有关引用的更多详细信息。

关于php - 只有变量可以通过引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2967597/

相关文章:

php - 如果语句对象未设置,是否需要调用 PDOStatement::closeCursor() ?

java - 在java中移动文件?

xml - SPARQL:将变量与文字组合

php - 无法在本地主机上安装 Joomla

php - $_POST方法请求限制

error-handling - Gerrit 错误说无法检查权限

reactjs - Apollo 客户端不显示错误信息

Java SQL 插入多个变量

javascript - 相同的函数给出不同的值

PHP 生成 00 - 29 之间的随机数