PHP и ссылки, приоритет оператора

Я использовал оператор ссылки и вот так

$root=empty($root)?&$this->_item:&$parent;

Это ловит исключение:

Multiple annotations found at this line:

- syntax error, unexpected ':'
- syntax error, unexpected '&'

Но я написал так:

if (empty($root)) {
        $root = &$this->_item;
    } else {
        $root = &$parent;
    }

Это прошло. Я хочу знать, почему?

Я прочитал руководство php о приоритете операторов, и оно выше, чем?:.

2 ответа

Решение

Вы не можете использовать ссылки с троичным оператором. Согласно Руководству по PHP:

Примечание. Обратите внимание, что троичный оператор является оператором и что он вычисляет не переменную, а результат оператора. Это важно знать, если вы хотите вернуть переменную по ссылке.

Поэтому вы должны использовать его без ссылок или использовать длинную форму:

if (empty($root)) {
    $root = &$this->_item;
} else {
    $root = &$parent;
}

Попробуй как

$root=(empty($root)) ? &$this->_item : &$parent;

или как

$root=(empty($root) == 'true') ? &$this->_item : &$parent;

Как сказал Пол Диксон, вам не нужно ссылаться. Так что вы можете напрямую попробовать как

$root=(empty($root)) ? $this->_item : $parent;
Другие вопросы по тегам