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;