| 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, ...) |