1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196
|
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
| 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) |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+
|