Пример:
public function newError($message, $code)
{
if ($code === false)
{
$code = isset($this->errorNumbers[$message]) ?
$this->errorNumbers[$message] :
isset($this->errorNumbers['']) ?
$this->errorNumbers[''] : $code;
}
}
По задумке, если $code - ложь, то в массиве errorNumbers ищется код ошибки по ее тексту. Если такой записи в массиве нет, то используется ключ '' (пустая стока) как значение по умолчанию.
Но вне зависимости от наличия errorNumbers[$message] результатом будет errorNumbers['']!
Лечится оборачиванием части выражения скобками:
public function newError($message, $code)
{
if ($code === false)
{
$code = isset($this->errorNumbers[$message]) ?
$this->errorNumbers[$message] :
(isset($this->errorNumbers['']) ?
$this->errorNumbers[''] : $code);
}
}
Я что-то не понимаю или это бага?
http://ru.php.net/manual/en/language.operators.precedence.phpПо ссылке указана левая ассоциативность.