Ошибка приоритета PHP-оператора?

Результат:

var_dump(null != $a = 15); var_dump($a); 

является:

 bool(true) int(15) 

Почему этот скрипт не вызывает ошибку? Поскольку != (Не равный оператор) имеет более высокий приоритет, чем = (оператор присваивания), $a следует сопоставить $a с null ?

Единственная причина, по которой я могу найти, это то, что в документации говорится, что это все еще законно: http://php.net/manual/en/language.operators.precedence.php#example-129

Кажется, это исключение из того, что показано в таблице выше.

Речь идет не о приоритете оператора, а о списках приоритетов операторов, которые не сообщают вам подробностей (на самом деле, они никогда этого не делают), например о правилах бизонов и результирующем сопоставлении шаблонов и сокращении стека.
Возьмем оператор null != $a = 15; , для простоты без var_dump.
Вот как синтаксический анализатор «видит» это утверждение – или: видит, что это утверждение.
(Надеюсь, это будет отображаться шрифтом фиксированной ширины везде …)

 null != $a = 15 ; T_VARIABLE identifier compound_variable T_LNUMBER namespace_name reference_variable common_scalar general_constant base_variable scalar scalar base_variable_with_functions_calls expr_without_variable expr_without_variable variable = expr expr T_IS_NOT_EQUAL \______ expr_without_variable _________/ \__________________ expr ____________________________________________/ ; \_________________ unticked_statement _______________________________________________/ statement 

(Вы можете найти правила на странице https://github.com/php/php-src/blob/PHP-5.6.15/Zend/zend_language_parser.y )

В этом случае нет специального правила для оператора присваивания; просто нет другого способа, чтобы парсер мог согласовать оператор, поэтому приоритет не применяется.