Twig

The flexible, fast, and secure
template engine for PHP

a Symfony Product
Docs for Twig version 3.x
Switch to another version: 1.x, 2.x

Questions & Feedback

License

Twig documentation is licensed under the new BSD license.
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, ...)