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