File: operators_precedence.rst

package info (click to toggle)
php-twig 3.21.1-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 6,220 kB
  • sloc: php: 24,694; makefile: 110; sh: 43
file content (196 lines) | stat: -rw-r--r-- 24,478 bytes parent folder | download
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)                                  |
+------------+------------------+---------+---------------+-------------------------------------------------------------------+