Chris@0
|
1 Valid usages of reserved keywords as identifiers
|
Chris@0
|
2 -----
|
Chris@0
|
3 <?php
|
Chris@0
|
4
|
Chris@0
|
5 class Test {
|
Chris@0
|
6 function array() {}
|
Chris@0
|
7 function public() {}
|
Chris@0
|
8
|
Chris@0
|
9 static function list() {}
|
Chris@0
|
10 static function protected() {}
|
Chris@0
|
11
|
Chris@0
|
12 public $class;
|
Chris@0
|
13 public $private;
|
Chris@0
|
14
|
Chris@0
|
15 const TRAIT = 3, FINAL = 4;
|
Chris@0
|
16
|
Chris@0
|
17 const __CLASS__ = 1, __TRAIT__ = 2, __FUNCTION__ = 3, __METHOD__ = 4, __LINE__ = 5,
|
Chris@0
|
18 __FILE__ = 6, __DIR__ = 7, __NAMESPACE__ = 8;
|
Chris@0
|
19 // __halt_compiler does not work
|
Chris@0
|
20 }
|
Chris@0
|
21
|
Chris@0
|
22 $t = new Test;
|
Chris@0
|
23 $t->array();
|
Chris@0
|
24 $t->public();
|
Chris@0
|
25
|
Chris@0
|
26 Test::list();
|
Chris@0
|
27 Test::protected();
|
Chris@0
|
28
|
Chris@0
|
29 $t->class;
|
Chris@0
|
30 $t->private;
|
Chris@0
|
31
|
Chris@0
|
32 Test::TRAIT;
|
Chris@0
|
33 Test::FINAL;
|
Chris@0
|
34
|
Chris@0
|
35 class Foo {
|
Chris@0
|
36 use TraitA, TraitB {
|
Chris@0
|
37 TraitA::catch insteadof namespace\TraitB;
|
Chris@0
|
38 TraitA::list as foreach;
|
Chris@0
|
39 TraitB::throw as protected public;
|
Chris@0
|
40 TraitB::self as protected;
|
Chris@0
|
41 exit as die;
|
Chris@0
|
42 \TraitC::exit as bye;
|
Chris@0
|
43 namespace\TraitC::exit as byebye;
|
Chris@0
|
44 TraitA::
|
Chris@0
|
45 //
|
Chris@0
|
46 /** doc comment */
|
Chris@0
|
47 #
|
Chris@0
|
48 catch /* comment */
|
Chris@0
|
49 // comment
|
Chris@0
|
50 # comment
|
Chris@0
|
51 insteadof TraitB;
|
Chris@0
|
52 }
|
Chris@0
|
53 }
|
Chris@0
|
54 -----
|
Chris@0
|
55 array(
|
Chris@0
|
56 0: Stmt_Class(
|
Chris@0
|
57 flags: 0
|
Chris@0
|
58 name: Test
|
Chris@0
|
59 extends: null
|
Chris@0
|
60 implements: array(
|
Chris@0
|
61 )
|
Chris@0
|
62 stmts: array(
|
Chris@0
|
63 0: Stmt_ClassMethod(
|
Chris@0
|
64 flags: 0
|
Chris@0
|
65 byRef: false
|
Chris@0
|
66 name: array
|
Chris@0
|
67 params: array(
|
Chris@0
|
68 )
|
Chris@0
|
69 returnType: null
|
Chris@0
|
70 stmts: array(
|
Chris@0
|
71 )
|
Chris@0
|
72 )
|
Chris@0
|
73 1: Stmt_ClassMethod(
|
Chris@0
|
74 flags: 0
|
Chris@0
|
75 byRef: false
|
Chris@0
|
76 name: public
|
Chris@0
|
77 params: array(
|
Chris@0
|
78 )
|
Chris@0
|
79 returnType: null
|
Chris@0
|
80 stmts: array(
|
Chris@0
|
81 )
|
Chris@0
|
82 )
|
Chris@0
|
83 2: Stmt_ClassMethod(
|
Chris@0
|
84 flags: MODIFIER_STATIC (8)
|
Chris@0
|
85 byRef: false
|
Chris@0
|
86 name: list
|
Chris@0
|
87 params: array(
|
Chris@0
|
88 )
|
Chris@0
|
89 returnType: null
|
Chris@0
|
90 stmts: array(
|
Chris@0
|
91 )
|
Chris@0
|
92 )
|
Chris@0
|
93 3: Stmt_ClassMethod(
|
Chris@0
|
94 flags: MODIFIER_STATIC (8)
|
Chris@0
|
95 byRef: false
|
Chris@0
|
96 name: protected
|
Chris@0
|
97 params: array(
|
Chris@0
|
98 )
|
Chris@0
|
99 returnType: null
|
Chris@0
|
100 stmts: array(
|
Chris@0
|
101 )
|
Chris@0
|
102 )
|
Chris@0
|
103 4: Stmt_Property(
|
Chris@0
|
104 flags: MODIFIER_PUBLIC (1)
|
Chris@0
|
105 props: array(
|
Chris@0
|
106 0: Stmt_PropertyProperty(
|
Chris@0
|
107 name: class
|
Chris@0
|
108 default: null
|
Chris@0
|
109 )
|
Chris@0
|
110 )
|
Chris@0
|
111 )
|
Chris@0
|
112 5: Stmt_Property(
|
Chris@0
|
113 flags: MODIFIER_PUBLIC (1)
|
Chris@0
|
114 props: array(
|
Chris@0
|
115 0: Stmt_PropertyProperty(
|
Chris@0
|
116 name: private
|
Chris@0
|
117 default: null
|
Chris@0
|
118 )
|
Chris@0
|
119 )
|
Chris@0
|
120 )
|
Chris@0
|
121 6: Stmt_ClassConst(
|
Chris@0
|
122 flags: 0
|
Chris@0
|
123 consts: array(
|
Chris@0
|
124 0: Const(
|
Chris@0
|
125 name: TRAIT
|
Chris@0
|
126 value: Scalar_LNumber(
|
Chris@0
|
127 value: 3
|
Chris@0
|
128 )
|
Chris@0
|
129 )
|
Chris@0
|
130 1: Const(
|
Chris@0
|
131 name: FINAL
|
Chris@0
|
132 value: Scalar_LNumber(
|
Chris@0
|
133 value: 4
|
Chris@0
|
134 )
|
Chris@0
|
135 )
|
Chris@0
|
136 )
|
Chris@0
|
137 )
|
Chris@0
|
138 7: Stmt_ClassConst(
|
Chris@0
|
139 flags: 0
|
Chris@0
|
140 consts: array(
|
Chris@0
|
141 0: Const(
|
Chris@0
|
142 name: __CLASS__
|
Chris@0
|
143 value: Scalar_LNumber(
|
Chris@0
|
144 value: 1
|
Chris@0
|
145 )
|
Chris@0
|
146 )
|
Chris@0
|
147 1: Const(
|
Chris@0
|
148 name: __TRAIT__
|
Chris@0
|
149 value: Scalar_LNumber(
|
Chris@0
|
150 value: 2
|
Chris@0
|
151 )
|
Chris@0
|
152 )
|
Chris@0
|
153 2: Const(
|
Chris@0
|
154 name: __FUNCTION__
|
Chris@0
|
155 value: Scalar_LNumber(
|
Chris@0
|
156 value: 3
|
Chris@0
|
157 )
|
Chris@0
|
158 )
|
Chris@0
|
159 3: Const(
|
Chris@0
|
160 name: __METHOD__
|
Chris@0
|
161 value: Scalar_LNumber(
|
Chris@0
|
162 value: 4
|
Chris@0
|
163 )
|
Chris@0
|
164 )
|
Chris@0
|
165 4: Const(
|
Chris@0
|
166 name: __LINE__
|
Chris@0
|
167 value: Scalar_LNumber(
|
Chris@0
|
168 value: 5
|
Chris@0
|
169 )
|
Chris@0
|
170 )
|
Chris@0
|
171 5: Const(
|
Chris@0
|
172 name: __FILE__
|
Chris@0
|
173 value: Scalar_LNumber(
|
Chris@0
|
174 value: 6
|
Chris@0
|
175 )
|
Chris@0
|
176 )
|
Chris@0
|
177 6: Const(
|
Chris@0
|
178 name: __DIR__
|
Chris@0
|
179 value: Scalar_LNumber(
|
Chris@0
|
180 value: 7
|
Chris@0
|
181 )
|
Chris@0
|
182 )
|
Chris@0
|
183 7: Const(
|
Chris@0
|
184 name: __NAMESPACE__
|
Chris@0
|
185 value: Scalar_LNumber(
|
Chris@0
|
186 value: 8
|
Chris@0
|
187 )
|
Chris@0
|
188 )
|
Chris@0
|
189 )
|
Chris@0
|
190 )
|
Chris@0
|
191 )
|
Chris@0
|
192 )
|
Chris@0
|
193 1: Expr_Assign(
|
Chris@0
|
194 var: Expr_Variable(
|
Chris@0
|
195 name: t
|
Chris@0
|
196 )
|
Chris@0
|
197 expr: Expr_New(
|
Chris@0
|
198 class: Name(
|
Chris@0
|
199 parts: array(
|
Chris@0
|
200 0: Test
|
Chris@0
|
201 )
|
Chris@0
|
202 )
|
Chris@0
|
203 args: array(
|
Chris@0
|
204 )
|
Chris@0
|
205 )
|
Chris@0
|
206 )
|
Chris@0
|
207 2: Expr_MethodCall(
|
Chris@0
|
208 var: Expr_Variable(
|
Chris@0
|
209 name: t
|
Chris@0
|
210 )
|
Chris@0
|
211 name: array
|
Chris@0
|
212 args: array(
|
Chris@0
|
213 )
|
Chris@0
|
214 )
|
Chris@0
|
215 3: Expr_MethodCall(
|
Chris@0
|
216 var: Expr_Variable(
|
Chris@0
|
217 name: t
|
Chris@0
|
218 )
|
Chris@0
|
219 name: public
|
Chris@0
|
220 args: array(
|
Chris@0
|
221 )
|
Chris@0
|
222 )
|
Chris@0
|
223 4: Expr_StaticCall(
|
Chris@0
|
224 class: Name(
|
Chris@0
|
225 parts: array(
|
Chris@0
|
226 0: Test
|
Chris@0
|
227 )
|
Chris@0
|
228 )
|
Chris@0
|
229 name: list
|
Chris@0
|
230 args: array(
|
Chris@0
|
231 )
|
Chris@0
|
232 )
|
Chris@0
|
233 5: Expr_StaticCall(
|
Chris@0
|
234 class: Name(
|
Chris@0
|
235 parts: array(
|
Chris@0
|
236 0: Test
|
Chris@0
|
237 )
|
Chris@0
|
238 )
|
Chris@0
|
239 name: protected
|
Chris@0
|
240 args: array(
|
Chris@0
|
241 )
|
Chris@0
|
242 )
|
Chris@0
|
243 6: Expr_PropertyFetch(
|
Chris@0
|
244 var: Expr_Variable(
|
Chris@0
|
245 name: t
|
Chris@0
|
246 )
|
Chris@0
|
247 name: class
|
Chris@0
|
248 )
|
Chris@0
|
249 7: Expr_PropertyFetch(
|
Chris@0
|
250 var: Expr_Variable(
|
Chris@0
|
251 name: t
|
Chris@0
|
252 )
|
Chris@0
|
253 name: private
|
Chris@0
|
254 )
|
Chris@0
|
255 8: Expr_ClassConstFetch(
|
Chris@0
|
256 class: Name(
|
Chris@0
|
257 parts: array(
|
Chris@0
|
258 0: Test
|
Chris@0
|
259 )
|
Chris@0
|
260 )
|
Chris@0
|
261 name: TRAIT
|
Chris@0
|
262 )
|
Chris@0
|
263 9: Expr_ClassConstFetch(
|
Chris@0
|
264 class: Name(
|
Chris@0
|
265 parts: array(
|
Chris@0
|
266 0: Test
|
Chris@0
|
267 )
|
Chris@0
|
268 )
|
Chris@0
|
269 name: FINAL
|
Chris@0
|
270 )
|
Chris@0
|
271 10: Stmt_Class(
|
Chris@0
|
272 flags: 0
|
Chris@0
|
273 name: Foo
|
Chris@0
|
274 extends: null
|
Chris@0
|
275 implements: array(
|
Chris@0
|
276 )
|
Chris@0
|
277 stmts: array(
|
Chris@0
|
278 0: Stmt_TraitUse(
|
Chris@0
|
279 traits: array(
|
Chris@0
|
280 0: Name(
|
Chris@0
|
281 parts: array(
|
Chris@0
|
282 0: TraitA
|
Chris@0
|
283 )
|
Chris@0
|
284 )
|
Chris@0
|
285 1: Name(
|
Chris@0
|
286 parts: array(
|
Chris@0
|
287 0: TraitB
|
Chris@0
|
288 )
|
Chris@0
|
289 )
|
Chris@0
|
290 )
|
Chris@0
|
291 adaptations: array(
|
Chris@0
|
292 0: Stmt_TraitUseAdaptation_Precedence(
|
Chris@0
|
293 trait: Name(
|
Chris@0
|
294 parts: array(
|
Chris@0
|
295 0: TraitA
|
Chris@0
|
296 )
|
Chris@0
|
297 )
|
Chris@0
|
298 method: catch
|
Chris@0
|
299 insteadof: array(
|
Chris@0
|
300 0: Name_Relative(
|
Chris@0
|
301 parts: array(
|
Chris@0
|
302 0: TraitB
|
Chris@0
|
303 )
|
Chris@0
|
304 )
|
Chris@0
|
305 )
|
Chris@0
|
306 )
|
Chris@0
|
307 1: Stmt_TraitUseAdaptation_Alias(
|
Chris@0
|
308 trait: Name(
|
Chris@0
|
309 parts: array(
|
Chris@0
|
310 0: TraitA
|
Chris@0
|
311 )
|
Chris@0
|
312 )
|
Chris@0
|
313 method: list
|
Chris@0
|
314 newModifier: null
|
Chris@0
|
315 newName: foreach
|
Chris@0
|
316 )
|
Chris@0
|
317 2: Stmt_TraitUseAdaptation_Alias(
|
Chris@0
|
318 trait: Name(
|
Chris@0
|
319 parts: array(
|
Chris@0
|
320 0: TraitB
|
Chris@0
|
321 )
|
Chris@0
|
322 )
|
Chris@0
|
323 method: throw
|
Chris@0
|
324 newModifier: MODIFIER_PROTECTED (2)
|
Chris@0
|
325 newName: public
|
Chris@0
|
326 )
|
Chris@0
|
327 3: Stmt_TraitUseAdaptation_Alias(
|
Chris@0
|
328 trait: Name(
|
Chris@0
|
329 parts: array(
|
Chris@0
|
330 0: TraitB
|
Chris@0
|
331 )
|
Chris@0
|
332 )
|
Chris@0
|
333 method: self
|
Chris@0
|
334 newModifier: MODIFIER_PROTECTED (2)
|
Chris@0
|
335 newName: null
|
Chris@0
|
336 )
|
Chris@0
|
337 4: Stmt_TraitUseAdaptation_Alias(
|
Chris@0
|
338 trait: null
|
Chris@0
|
339 method: exit
|
Chris@0
|
340 newModifier: null
|
Chris@0
|
341 newName: die
|
Chris@0
|
342 )
|
Chris@0
|
343 5: Stmt_TraitUseAdaptation_Alias(
|
Chris@0
|
344 trait: Name_FullyQualified(
|
Chris@0
|
345 parts: array(
|
Chris@0
|
346 0: TraitC
|
Chris@0
|
347 )
|
Chris@0
|
348 )
|
Chris@0
|
349 method: exit
|
Chris@0
|
350 newModifier: null
|
Chris@0
|
351 newName: bye
|
Chris@0
|
352 )
|
Chris@0
|
353 6: Stmt_TraitUseAdaptation_Alias(
|
Chris@0
|
354 trait: Name_Relative(
|
Chris@0
|
355 parts: array(
|
Chris@0
|
356 0: TraitC
|
Chris@0
|
357 )
|
Chris@0
|
358 )
|
Chris@0
|
359 method: exit
|
Chris@0
|
360 newModifier: null
|
Chris@0
|
361 newName: byebye
|
Chris@0
|
362 )
|
Chris@0
|
363 7: Stmt_TraitUseAdaptation_Precedence(
|
Chris@0
|
364 trait: Name(
|
Chris@0
|
365 parts: array(
|
Chris@0
|
366 0: TraitA
|
Chris@0
|
367 )
|
Chris@0
|
368 )
|
Chris@0
|
369 method: catch
|
Chris@0
|
370 insteadof: array(
|
Chris@0
|
371 0: Name(
|
Chris@0
|
372 parts: array(
|
Chris@0
|
373 0: TraitB
|
Chris@0
|
374 )
|
Chris@0
|
375 )
|
Chris@0
|
376 )
|
Chris@0
|
377 )
|
Chris@0
|
378 )
|
Chris@0
|
379 )
|
Chris@0
|
380 )
|
Chris@0
|
381 )
|
Chris@0
|
382 ) |