Files
Twig/doc/operators_precedence.rst

205 lines
25 KiB
ReStructuredText

+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| Precedence | Operator | Type | Associativity | Description |
+============+==================+=========+===============+===================================================================+
| 512 | ``...`` | prefix | n/a | Spread operator |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| => 300 | ``|`` | infix | Left | Twig filter call |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``(`` | | | Twig function call |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``.``, ``?.`` | | | Get an attribute on a variable |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``[`` | | | Array access |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 500 | ``-`` | prefix | n/a | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``+`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 300 => 5 | ``??`` | infix | Right | Null coalescing operator (a ?? b) |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 250 | ``=>`` | infix | Left | Arrow function (x => expr) |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 200 | ``**`` | infix | Right | Exponentiation operator |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 100 | ``is`` | infix | Left | Twig tests |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``is not`` | | | Twig tests |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 60 | ``*`` | infix | Left | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``/`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``//`` | | | Floor division |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``%`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 50 => 70 | ``not`` | prefix | n/a | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 40 => 27 | ``~`` | infix | Left | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 30 | ``+`` | infix | Left | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``-`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 25 | ``..`` | infix | Left | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 20 | ``==`` | infix | Left | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``!=`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``<=>`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``<`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``>`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``>=`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``<=`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``not in`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``in`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``matches`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``starts with`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``ends with`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``has some`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``has every`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``===`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``!==`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 18 | ``b-and`` | infix | Left | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 17 | ``b-xor`` | infix | Left | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 16 | ``b-or`` | infix | Left | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 15 | ``and`` | infix | Left | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 12 | ``xor`` | infix | Left | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 10 | ``or`` | infix | Left | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 5 | ``?:``, ``? :`` | infix | Right | Elvis operator (a ?: b) |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 0 | ``(`` | prefix | n/a | Explicit group expression (a) |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``?`` | infix | Left | Conditional operator (a ? b : c) |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``=`` | | Right | Assignment operator |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``literal`` | prefix | n/a | A literal value (boolean, string, number, sequence, mapping, ...) |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
When a precedence will change in 4.0, the new precedence is indicated by the arrow ``=>``.
Here is the same table for Twig 4.0 with adjusted precedences:
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| Precedence | Operator | Type | Associativity | Description |
+============+==================+=========+===============+===================================================================+
| 512 | ``...`` | prefix | n/a | Spread operator |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``(`` | infix | Left | Twig function call |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``.``, ``?.`` | | | Get an attribute on a variable |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``[`` | | | Array access |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 500 | ``-`` | prefix | n/a | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``+`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 300 | ``|`` | infix | Left | Twig filter call |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 250 | ``=>`` | infix | Left | Arrow function (x => expr) |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 200 | ``**`` | infix | Right | Exponentiation operator |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 100 | ``is`` | infix | Left | Twig tests |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``is not`` | | | Twig tests |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 70 | ``not`` | prefix | n/a | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 60 | ``*`` | infix | Left | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``/`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``//`` | | | Floor division |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``%`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 30 | ``+`` | infix | Left | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``-`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 27 | ``~`` | infix | Left | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 25 | ``..`` | infix | Left | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 20 | ``==`` | infix | Left | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``!=`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``<=>`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``<`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``>`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``>=`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``<=`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``not in`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``in`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``matches`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``starts with`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``ends with`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``has some`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``has every`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``===`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``!==`` | | | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 18 | ``b-and`` | infix | Left | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 17 | ``b-xor`` | infix | Left | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 16 | ``b-or`` | infix | Left | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 15 | ``and`` | infix | Left | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 12 | ``xor`` | infix | Left | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 10 | ``or`` | infix | Left | |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 5 | ``??`` | infix | Right | Null coalescing operator (a ?? b) |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``?:``, ``? :`` | | | Elvis operator (a ?: b) |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 0 | ``(`` | prefix | n/a | Explicit group expression (a) |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``?`` | infix | Left | Conditional operator (a ? b : c) |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``=`` | | Right | Assignment operator |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| | ``literal`` | prefix | n/a | A literal value (boolean, string, number, sequence, mapping, ...) |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+