Тернарный оператор, не работающий со ссылочными переменными в PHP

Почему это не работает?

$a = 'FOO'; $foo = $a ? &$a : 'whatever'; // <- error here echo $foo; 

Я получаю ошибку синтаксического анализа: |

Если вы хотите присвоить ссылку с помощью тройного утверждения, вам понадобится это неуклюжее решение:

  list($foo) = $a ? array(&$a) : array('whatever'); 

Однако, как сказано в других ответах, это редко сохраняет память.

Хотя вы отметили свой вопрос if-statement , это не утверждение if, это тернарное условное выражение. Я переделал его соответствующим образом.

Теперь причина, по которой он не работает, заключается в том, что назначение по ссылке отличается от назначения выражений нормального значения в PHP. Вы не можете использовать ссылки с оператором ?: же, как вы не можете сделать return &$foo; в функции. Более подробную информацию см. В этих справочных страницах о ссылках на PHP.

  • Какие ссылки делают
  • Возврат ссылок

Если вы используете фактический оператор if, он будет работать:

 if ($a) $foo = &$a; else $foo = 'whatever'; 

Но почему вы хотели бы использовать такие ссылки, как это, вне меня (если это не PHP 4, и даже тогда вы больше не должны использовать PHP 4).

Попробуй это:

 $a ? $foo = &$a : $foo = 'whatever';