You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP通知错误求助:仅应返回变量引用(Common.php文件)

解决PHP通知级错误:Only variable references should be returned by reference

嘿,我来帮你搞定这个core/Common.php里的通知错误!这个问题其实挺常见的,核心原因是你有个声明为返回引用的函数,实际返回的却不是变量的直接引用——PHP对引用返回的规则卡得很严,必须返回实打实的变量,不能是表达式或者临时值。

错误根源分析

结合你提到的Zend Search Lucene相关代码,大概率是某个带&的函数(比如public function &xxx()这种写法)里,返回语句直接用了表达式。举个例子,如果你的代码里有类似这样的写法:

public function &getFilter() {
    return $this->_filters[]; // 这里返回的是赋值表达式,不是变量引用
}

就会触发这个通知,因为$this->_filters[]是一个“把值追加到数组”的操作,不是直接指向某个变量的引用。

具体修复方案

按下面的步骤来排查和修改:

  • 先找问题函数:在Common.php里搜索所有带&的函数声明(也就是前面加了&的方法),重点看它们的返回语句。
  • 修改返回逻辑:把返回表达式改成先赋值给变量,再返回变量的引用。比如刚才的错误写法可以改成:
    public function &getLastFilter() {
        // 先把目标值存到变量里
        $targetFilter = end($this->_filters);
        // 返回这个变量的引用
        return $targetFilter;
    }
    
    如果是addFilter方法本身被误声明成了引用返回(但从你给的代码片段看它原本不需要),那更简单——直接去掉函数名前的&,改成:
    public function addFilter(Zend_Search_Lucene_Analysis_TokenFilter $filter) {
        $this->_filters[] = $filter;
    }
    
    毕竟这个方法的作用只是添加过滤器,根本不需要返回引用。
  • 验证修复:改完之后重新跑代码,这个通知应该就消失了。

内容的提问来源于stack exchange,提问作者Michael Dougherty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:13:35