doc/operators_precedence.rst
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 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, ...) |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+