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@13
|
58 name: Identifier(
|
Chris@13
|
59 name: Test
|
Chris@13
|
60 )
|
Chris@0
|
61 extends: null
|
Chris@0
|
62 implements: array(
|
Chris@0
|
63 )
|
Chris@0
|
64 stmts: array(
|
Chris@0
|
65 0: Stmt_ClassMethod(
|
Chris@0
|
66 flags: 0
|
Chris@0
|
67 byRef: false
|
Chris@13
|
68 name: Identifier(
|
Chris@13
|
69 name: array
|
Chris@13
|
70 )
|
Chris@0
|
71 params: array(
|
Chris@0
|
72 )
|
Chris@0
|
73 returnType: null
|
Chris@0
|
74 stmts: array(
|
Chris@0
|
75 )
|
Chris@0
|
76 )
|
Chris@0
|
77 1: Stmt_ClassMethod(
|
Chris@0
|
78 flags: 0
|
Chris@0
|
79 byRef: false
|
Chris@13
|
80 name: Identifier(
|
Chris@13
|
81 name: public
|
Chris@13
|
82 )
|
Chris@0
|
83 params: array(
|
Chris@0
|
84 )
|
Chris@0
|
85 returnType: null
|
Chris@0
|
86 stmts: array(
|
Chris@0
|
87 )
|
Chris@0
|
88 )
|
Chris@0
|
89 2: Stmt_ClassMethod(
|
Chris@0
|
90 flags: MODIFIER_STATIC (8)
|
Chris@0
|
91 byRef: false
|
Chris@13
|
92 name: Identifier(
|
Chris@13
|
93 name: list
|
Chris@13
|
94 )
|
Chris@0
|
95 params: array(
|
Chris@0
|
96 )
|
Chris@0
|
97 returnType: null
|
Chris@0
|
98 stmts: array(
|
Chris@0
|
99 )
|
Chris@0
|
100 )
|
Chris@0
|
101 3: Stmt_ClassMethod(
|
Chris@0
|
102 flags: MODIFIER_STATIC (8)
|
Chris@0
|
103 byRef: false
|
Chris@13
|
104 name: Identifier(
|
Chris@13
|
105 name: protected
|
Chris@13
|
106 )
|
Chris@0
|
107 params: array(
|
Chris@0
|
108 )
|
Chris@0
|
109 returnType: null
|
Chris@0
|
110 stmts: array(
|
Chris@0
|
111 )
|
Chris@0
|
112 )
|
Chris@0
|
113 4: Stmt_Property(
|
Chris@0
|
114 flags: MODIFIER_PUBLIC (1)
|
Chris@17
|
115 type: null
|
Chris@0
|
116 props: array(
|
Chris@0
|
117 0: Stmt_PropertyProperty(
|
Chris@13
|
118 name: VarLikeIdentifier(
|
Chris@13
|
119 name: class
|
Chris@13
|
120 )
|
Chris@0
|
121 default: null
|
Chris@0
|
122 )
|
Chris@0
|
123 )
|
Chris@0
|
124 )
|
Chris@0
|
125 5: Stmt_Property(
|
Chris@0
|
126 flags: MODIFIER_PUBLIC (1)
|
Chris@17
|
127 type: null
|
Chris@0
|
128 props: array(
|
Chris@0
|
129 0: Stmt_PropertyProperty(
|
Chris@13
|
130 name: VarLikeIdentifier(
|
Chris@13
|
131 name: private
|
Chris@13
|
132 )
|
Chris@0
|
133 default: null
|
Chris@0
|
134 )
|
Chris@0
|
135 )
|
Chris@0
|
136 )
|
Chris@0
|
137 6: Stmt_ClassConst(
|
Chris@0
|
138 flags: 0
|
Chris@0
|
139 consts: array(
|
Chris@0
|
140 0: Const(
|
Chris@13
|
141 name: Identifier(
|
Chris@13
|
142 name: TRAIT
|
Chris@13
|
143 )
|
Chris@0
|
144 value: Scalar_LNumber(
|
Chris@0
|
145 value: 3
|
Chris@0
|
146 )
|
Chris@0
|
147 )
|
Chris@0
|
148 1: Const(
|
Chris@13
|
149 name: Identifier(
|
Chris@13
|
150 name: FINAL
|
Chris@13
|
151 )
|
Chris@0
|
152 value: Scalar_LNumber(
|
Chris@0
|
153 value: 4
|
Chris@0
|
154 )
|
Chris@0
|
155 )
|
Chris@0
|
156 )
|
Chris@0
|
157 )
|
Chris@0
|
158 7: Stmt_ClassConst(
|
Chris@0
|
159 flags: 0
|
Chris@0
|
160 consts: array(
|
Chris@0
|
161 0: Const(
|
Chris@13
|
162 name: Identifier(
|
Chris@13
|
163 name: __CLASS__
|
Chris@13
|
164 )
|
Chris@0
|
165 value: Scalar_LNumber(
|
Chris@0
|
166 value: 1
|
Chris@0
|
167 )
|
Chris@0
|
168 )
|
Chris@0
|
169 1: Const(
|
Chris@13
|
170 name: Identifier(
|
Chris@13
|
171 name: __TRAIT__
|
Chris@13
|
172 )
|
Chris@0
|
173 value: Scalar_LNumber(
|
Chris@0
|
174 value: 2
|
Chris@0
|
175 )
|
Chris@0
|
176 )
|
Chris@0
|
177 2: Const(
|
Chris@13
|
178 name: Identifier(
|
Chris@13
|
179 name: __FUNCTION__
|
Chris@13
|
180 )
|
Chris@0
|
181 value: Scalar_LNumber(
|
Chris@0
|
182 value: 3
|
Chris@0
|
183 )
|
Chris@0
|
184 )
|
Chris@0
|
185 3: Const(
|
Chris@13
|
186 name: Identifier(
|
Chris@13
|
187 name: __METHOD__
|
Chris@13
|
188 )
|
Chris@0
|
189 value: Scalar_LNumber(
|
Chris@0
|
190 value: 4
|
Chris@0
|
191 )
|
Chris@0
|
192 )
|
Chris@0
|
193 4: Const(
|
Chris@13
|
194 name: Identifier(
|
Chris@13
|
195 name: __LINE__
|
Chris@13
|
196 )
|
Chris@0
|
197 value: Scalar_LNumber(
|
Chris@0
|
198 value: 5
|
Chris@0
|
199 )
|
Chris@0
|
200 )
|
Chris@0
|
201 5: Const(
|
Chris@13
|
202 name: Identifier(
|
Chris@13
|
203 name: __FILE__
|
Chris@13
|
204 )
|
Chris@0
|
205 value: Scalar_LNumber(
|
Chris@0
|
206 value: 6
|
Chris@0
|
207 )
|
Chris@0
|
208 )
|
Chris@0
|
209 6: Const(
|
Chris@13
|
210 name: Identifier(
|
Chris@13
|
211 name: __DIR__
|
Chris@13
|
212 )
|
Chris@0
|
213 value: Scalar_LNumber(
|
Chris@0
|
214 value: 7
|
Chris@0
|
215 )
|
Chris@0
|
216 )
|
Chris@0
|
217 7: Const(
|
Chris@13
|
218 name: Identifier(
|
Chris@13
|
219 name: __NAMESPACE__
|
Chris@13
|
220 )
|
Chris@0
|
221 value: Scalar_LNumber(
|
Chris@0
|
222 value: 8
|
Chris@0
|
223 )
|
Chris@0
|
224 )
|
Chris@0
|
225 )
|
Chris@0
|
226 )
|
Chris@17
|
227 8: Stmt_Nop(
|
Chris@17
|
228 comments: array(
|
Chris@17
|
229 0: // __halt_compiler does not work
|
Chris@17
|
230 )
|
Chris@17
|
231 )
|
Chris@0
|
232 )
|
Chris@0
|
233 )
|
Chris@13
|
234 1: Stmt_Expression(
|
Chris@13
|
235 expr: Expr_Assign(
|
Chris@13
|
236 var: Expr_Variable(
|
Chris@13
|
237 name: t
|
Chris@13
|
238 )
|
Chris@13
|
239 expr: Expr_New(
|
Chris@13
|
240 class: Name(
|
Chris@13
|
241 parts: array(
|
Chris@13
|
242 0: Test
|
Chris@13
|
243 )
|
Chris@13
|
244 )
|
Chris@13
|
245 args: array(
|
Chris@13
|
246 )
|
Chris@13
|
247 )
|
Chris@0
|
248 )
|
Chris@13
|
249 )
|
Chris@13
|
250 2: Stmt_Expression(
|
Chris@13
|
251 expr: Expr_MethodCall(
|
Chris@13
|
252 var: Expr_Variable(
|
Chris@13
|
253 name: t
|
Chris@13
|
254 )
|
Chris@13
|
255 name: Identifier(
|
Chris@13
|
256 name: array
|
Chris@13
|
257 )
|
Chris@13
|
258 args: array(
|
Chris@13
|
259 )
|
Chris@13
|
260 )
|
Chris@13
|
261 )
|
Chris@13
|
262 3: Stmt_Expression(
|
Chris@13
|
263 expr: Expr_MethodCall(
|
Chris@13
|
264 var: Expr_Variable(
|
Chris@13
|
265 name: t
|
Chris@13
|
266 )
|
Chris@13
|
267 name: Identifier(
|
Chris@13
|
268 name: public
|
Chris@13
|
269 )
|
Chris@13
|
270 args: array(
|
Chris@13
|
271 )
|
Chris@13
|
272 )
|
Chris@13
|
273 )
|
Chris@13
|
274 4: Stmt_Expression(
|
Chris@13
|
275 expr: Expr_StaticCall(
|
Chris@0
|
276 class: Name(
|
Chris@0
|
277 parts: array(
|
Chris@0
|
278 0: Test
|
Chris@0
|
279 )
|
Chris@0
|
280 )
|
Chris@13
|
281 name: Identifier(
|
Chris@13
|
282 name: list
|
Chris@13
|
283 )
|
Chris@0
|
284 args: array(
|
Chris@0
|
285 )
|
Chris@0
|
286 )
|
Chris@0
|
287 )
|
Chris@13
|
288 5: Stmt_Expression(
|
Chris@13
|
289 expr: Expr_StaticCall(
|
Chris@13
|
290 class: Name(
|
Chris@13
|
291 parts: array(
|
Chris@13
|
292 0: Test
|
Chris@13
|
293 )
|
Chris@13
|
294 )
|
Chris@13
|
295 name: Identifier(
|
Chris@13
|
296 name: protected
|
Chris@13
|
297 )
|
Chris@13
|
298 args: array(
|
Chris@13
|
299 )
|
Chris@0
|
300 )
|
Chris@0
|
301 )
|
Chris@13
|
302 6: Stmt_Expression(
|
Chris@13
|
303 expr: Expr_PropertyFetch(
|
Chris@13
|
304 var: Expr_Variable(
|
Chris@13
|
305 name: t
|
Chris@13
|
306 )
|
Chris@13
|
307 name: Identifier(
|
Chris@13
|
308 name: class
|
Chris@13
|
309 )
|
Chris@0
|
310 )
|
Chris@0
|
311 )
|
Chris@13
|
312 7: Stmt_Expression(
|
Chris@13
|
313 expr: Expr_PropertyFetch(
|
Chris@13
|
314 var: Expr_Variable(
|
Chris@13
|
315 name: t
|
Chris@13
|
316 )
|
Chris@13
|
317 name: Identifier(
|
Chris@13
|
318 name: private
|
Chris@0
|
319 )
|
Chris@0
|
320 )
|
Chris@13
|
321 )
|
Chris@13
|
322 8: Stmt_Expression(
|
Chris@13
|
323 expr: Expr_ClassConstFetch(
|
Chris@13
|
324 class: Name(
|
Chris@13
|
325 parts: array(
|
Chris@13
|
326 0: Test
|
Chris@13
|
327 )
|
Chris@13
|
328 )
|
Chris@13
|
329 name: Identifier(
|
Chris@13
|
330 name: TRAIT
|
Chris@13
|
331 )
|
Chris@0
|
332 )
|
Chris@0
|
333 )
|
Chris@13
|
334 9: Stmt_Expression(
|
Chris@13
|
335 expr: Expr_ClassConstFetch(
|
Chris@13
|
336 class: Name(
|
Chris@13
|
337 parts: array(
|
Chris@13
|
338 0: Test
|
Chris@13
|
339 )
|
Chris@13
|
340 )
|
Chris@13
|
341 name: Identifier(
|
Chris@13
|
342 name: FINAL
|
Chris@0
|
343 )
|
Chris@0
|
344 )
|
Chris@0
|
345 )
|
Chris@0
|
346 10: Stmt_Class(
|
Chris@0
|
347 flags: 0
|
Chris@13
|
348 name: Identifier(
|
Chris@13
|
349 name: Foo
|
Chris@13
|
350 )
|
Chris@0
|
351 extends: null
|
Chris@0
|
352 implements: array(
|
Chris@0
|
353 )
|
Chris@0
|
354 stmts: array(
|
Chris@0
|
355 0: Stmt_TraitUse(
|
Chris@0
|
356 traits: array(
|
Chris@0
|
357 0: Name(
|
Chris@0
|
358 parts: array(
|
Chris@0
|
359 0: TraitA
|
Chris@0
|
360 )
|
Chris@0
|
361 )
|
Chris@0
|
362 1: Name(
|
Chris@0
|
363 parts: array(
|
Chris@0
|
364 0: TraitB
|
Chris@0
|
365 )
|
Chris@0
|
366 )
|
Chris@0
|
367 )
|
Chris@0
|
368 adaptations: array(
|
Chris@0
|
369 0: Stmt_TraitUseAdaptation_Precedence(
|
Chris@0
|
370 trait: Name(
|
Chris@0
|
371 parts: array(
|
Chris@0
|
372 0: TraitA
|
Chris@0
|
373 )
|
Chris@0
|
374 )
|
Chris@13
|
375 method: Identifier(
|
Chris@13
|
376 name: catch
|
Chris@13
|
377 )
|
Chris@0
|
378 insteadof: array(
|
Chris@0
|
379 0: Name_Relative(
|
Chris@0
|
380 parts: array(
|
Chris@0
|
381 0: TraitB
|
Chris@0
|
382 )
|
Chris@0
|
383 )
|
Chris@0
|
384 )
|
Chris@0
|
385 )
|
Chris@0
|
386 1: Stmt_TraitUseAdaptation_Alias(
|
Chris@0
|
387 trait: Name(
|
Chris@0
|
388 parts: array(
|
Chris@0
|
389 0: TraitA
|
Chris@0
|
390 )
|
Chris@0
|
391 )
|
Chris@13
|
392 method: Identifier(
|
Chris@13
|
393 name: list
|
Chris@13
|
394 )
|
Chris@0
|
395 newModifier: null
|
Chris@13
|
396 newName: Identifier(
|
Chris@13
|
397 name: foreach
|
Chris@13
|
398 )
|
Chris@0
|
399 )
|
Chris@0
|
400 2: Stmt_TraitUseAdaptation_Alias(
|
Chris@0
|
401 trait: Name(
|
Chris@0
|
402 parts: array(
|
Chris@0
|
403 0: TraitB
|
Chris@0
|
404 )
|
Chris@0
|
405 )
|
Chris@13
|
406 method: Identifier(
|
Chris@13
|
407 name: throw
|
Chris@13
|
408 )
|
Chris@0
|
409 newModifier: MODIFIER_PROTECTED (2)
|
Chris@13
|
410 newName: Identifier(
|
Chris@13
|
411 name: public
|
Chris@13
|
412 )
|
Chris@0
|
413 )
|
Chris@0
|
414 3: Stmt_TraitUseAdaptation_Alias(
|
Chris@0
|
415 trait: Name(
|
Chris@0
|
416 parts: array(
|
Chris@0
|
417 0: TraitB
|
Chris@0
|
418 )
|
Chris@0
|
419 )
|
Chris@13
|
420 method: Identifier(
|
Chris@13
|
421 name: self
|
Chris@13
|
422 )
|
Chris@0
|
423 newModifier: MODIFIER_PROTECTED (2)
|
Chris@0
|
424 newName: null
|
Chris@0
|
425 )
|
Chris@0
|
426 4: Stmt_TraitUseAdaptation_Alias(
|
Chris@0
|
427 trait: null
|
Chris@13
|
428 method: Identifier(
|
Chris@13
|
429 name: exit
|
Chris@13
|
430 )
|
Chris@0
|
431 newModifier: null
|
Chris@13
|
432 newName: Identifier(
|
Chris@13
|
433 name: die
|
Chris@13
|
434 )
|
Chris@0
|
435 )
|
Chris@0
|
436 5: Stmt_TraitUseAdaptation_Alias(
|
Chris@0
|
437 trait: Name_FullyQualified(
|
Chris@0
|
438 parts: array(
|
Chris@0
|
439 0: TraitC
|
Chris@0
|
440 )
|
Chris@0
|
441 )
|
Chris@13
|
442 method: Identifier(
|
Chris@13
|
443 name: exit
|
Chris@13
|
444 )
|
Chris@0
|
445 newModifier: null
|
Chris@13
|
446 newName: Identifier(
|
Chris@13
|
447 name: bye
|
Chris@13
|
448 )
|
Chris@0
|
449 )
|
Chris@0
|
450 6: Stmt_TraitUseAdaptation_Alias(
|
Chris@0
|
451 trait: Name_Relative(
|
Chris@0
|
452 parts: array(
|
Chris@0
|
453 0: TraitC
|
Chris@0
|
454 )
|
Chris@0
|
455 )
|
Chris@13
|
456 method: Identifier(
|
Chris@13
|
457 name: exit
|
Chris@13
|
458 )
|
Chris@0
|
459 newModifier: null
|
Chris@13
|
460 newName: Identifier(
|
Chris@13
|
461 name: byebye
|
Chris@13
|
462 )
|
Chris@0
|
463 )
|
Chris@0
|
464 7: Stmt_TraitUseAdaptation_Precedence(
|
Chris@0
|
465 trait: Name(
|
Chris@0
|
466 parts: array(
|
Chris@0
|
467 0: TraitA
|
Chris@0
|
468 )
|
Chris@0
|
469 )
|
Chris@13
|
470 method: Identifier(
|
Chris@13
|
471 name: catch
|
Chris@13
|
472 comments: array(
|
Chris@13
|
473 0: //
|
Chris@13
|
474 1: /** doc comment */
|
Chris@13
|
475 2: #
|
Chris@13
|
476 )
|
Chris@13
|
477 )
|
Chris@0
|
478 insteadof: array(
|
Chris@0
|
479 0: Name(
|
Chris@0
|
480 parts: array(
|
Chris@0
|
481 0: TraitB
|
Chris@0
|
482 )
|
Chris@0
|
483 )
|
Chris@0
|
484 )
|
Chris@0
|
485 )
|
Chris@0
|
486 )
|
Chris@0
|
487 )
|
Chris@0
|
488 )
|
Chris@0
|
489 )
|
Chris@0
|
490 ) |