PHP - передача переменной в качестве ссылки сгенерировала неуказанную ошибку - PullRequest
1 голос
/ 19 июня 2011

Я получаю сообщение об ошибке при использовании ссылки на переменную.Я упускаю что-то очевидное?

в основном ...

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

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

(цикл по списку вещей, если обязательное свойство вещи истинно, передать эту вещь в список необходимых вещейдругой передать его в список дополнительных вещей ...)

tyia

1 Ответ

1 голос
/ 19 июня 2011

Судя по всему, вы пытаетесь разделить вещи, которые являются обязательными или необязательными, в разные массивы.

<?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 и присваивает $ this-> required для $list. Когда вы пытаетесь добавить в массив следующий код, $list является скаляром, а не массивом, поэтому он не работает. Единственный способ решить эту проблему - использовать одно из приведенных выше решений или создать функцию, возвращающую массив по ссылке.

Ссылка : От http://php.net/manual/en/language.operators.comparison.php:

Обратите внимание, что троичный оператор это утверждение, и что оно не оценить переменную, но к результат заявления. Это важно знать, если вы хотите вернуть переменную по ссылке. оператор return $ var == 42? $ a: $ b; в функции возврата по ссылке будет поэтому не работает и предупреждение выпущено в более поздних версиях PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...