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
相关产品推荐
相关产品推荐

