Почему это не работает?
$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';