要查找的内容'只能通过引用返回变量引用'?

时间:2014-12-23 01:01:25

标签: php arrays reference

我的函数用于通过引用提供数组,然后返回对多维数组的一部分的引用:

function &find(&$refArray, $key, $value) {
  ...
  if ($condition) {
     return $array
  }
}

我没有包含代码,因为我的代码包含了很多依赖于我的代码库中定义的其他功能,这会让它变得非常复杂。

该功能按预期工作。它返回对数组的引用,但它显示一个通知:

Notice: Only variable references should be returned by reference in Arr.php on line 46

第46行引用了find函数的结束括号。从搜索开始,当你试图返回一个bool但是它返回对数组的引用并且在我的代码中没有任何地方返回一个数组时,通常会显示此错误。

解决方案:这是由于如果条件未满足而未返回任何内容而导致的功能导致未通过Barmar(谢谢)指出的参考检查。我通过将其添加到函数的底部来解决这个问题:

$return = false;
return $return;

这样它总是返回对变量的引用。

1 个答案:

答案 0 :(得分:1)

return $array;语句可能位于if语句(或其他一些条件)中。如果测试为假,它将跳过if语句,并在到达函数末尾时返回。由于那里没有return $variable声明,您将收到此警告。

我能够通过以下示例重现您的情况:

  function &find($test) {
    $array = array(1, 2, 3);
    if ($test) {
      return $array;
    }
  }

find(true)工作正常,find(false)会生成警告。

这就是原因,因为警告中的行号是结束},而不是包含return的行。所以它必须指的是当你到达函数末尾时发生的隐式return undefined