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) |
?: |
Elvis operator (a ?: b) | |||
0 | ( |
prefix | n/a | Explicit group expression (a) |
literal |
A literal value (boolean, string, number, sequence, mapping, ...) | |||
? |
infix | Left | Conditional operator (a ? b : c) |
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) | |||
?: |
Elvis operator (a ?: b) | |||
0 | ( |
prefix | n/a | Explicit group expression (a) |
literal |
A literal value (boolean, string, number, sequence, mapping, ...) | |||
? |
infix | Left | Conditional operator (a ? b : c) |