PHP - 传递变量作为引用生成未指定的错误

时间:2011-06-19 17:48:04

标签: php reference

使用变量引用时出错。我错过了一些明显的东西吗?

...基本上

$required = array();
$optional = array();

foreach($things as $thing){
  $list =& $thing->required ? $required : $optional;
  $list[] = $thing;
}

(通过事物列表循环,如果事物的必需属性为真,则将该事物传递给所需事物列表,其他事物将其传递给可选事物列表......)

tyia

1 个答案:

答案 0 :(得分:1)

从它的外观来看,似乎你正试图将所需的或可选的东西分成不同的数组。

<?php

foreach ( $things as $thing )
{
  if ( $thing->required )
    $required[] = $thing;
  else
    $optional[] = $thing;
}

如果你坚持在一行上做,你可以这样做:

<?php

foreach ( $things as $thing )
  ${$thing->required ? 'required' : 'optional'}[] = $thing;

您的代码存在问题$list =& $thing->required ? $required : $optional;。 PHP忽略? $required : $optional部分正在为$list分配$ this-&gt;。当您尝试在其上添加数组时,$list是标量而不再是数组,因此它失败了。我能想到解决这个问题的唯一方法是使用上面的解决方案之一,或创建通过引用返回数组的函数。

参考:来自http://php.net/manual/en/language.operators.comparison.php

  

请注意三元运算符   是一个声明,它没有   评估变量,但是   声明的结果。这是   重要的是要知道你是否愿意   通过引用返回变量。该   语句返回$ var == 42? $ a:$ b;   在按引用返回的功能中   因此不起作用,并发出警告   在以后的PHP版本中发布。