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