firstClassCallables.test 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. First-class callables
  2. -----
  3. <?php
  4. foo(...);
  5. $this->foo(...);
  6. A::foo(...);
  7. // These are invalid, but accepted on the parser level.
  8. new Foo(...);
  9. $this?->foo(...);
  10. #[Foo(...)]
  11. function foo() {}
  12. -----
  13. !!php7
  14. array(
  15. 0: Stmt_Expression(
  16. expr: Expr_FuncCall(
  17. name: Name(
  18. parts: array(
  19. 0: foo
  20. )
  21. )
  22. args: array(
  23. 0: VariadicPlaceholder(
  24. )
  25. )
  26. )
  27. )
  28. 1: Stmt_Expression(
  29. expr: Expr_MethodCall(
  30. var: Expr_Variable(
  31. name: this
  32. )
  33. name: Identifier(
  34. name: foo
  35. )
  36. args: array(
  37. 0: VariadicPlaceholder(
  38. )
  39. )
  40. )
  41. )
  42. 2: Stmt_Expression(
  43. expr: Expr_StaticCall(
  44. class: Name(
  45. parts: array(
  46. 0: A
  47. )
  48. )
  49. name: Identifier(
  50. name: foo
  51. )
  52. args: array(
  53. 0: VariadicPlaceholder(
  54. )
  55. )
  56. )
  57. )
  58. 3: Stmt_Expression(
  59. expr: Expr_New(
  60. class: Name(
  61. parts: array(
  62. 0: Foo
  63. )
  64. )
  65. args: array(
  66. 0: VariadicPlaceholder(
  67. )
  68. )
  69. comments: array(
  70. 0: // These are invalid, but accepted on the parser level.
  71. )
  72. )
  73. comments: array(
  74. 0: // These are invalid, but accepted on the parser level.
  75. )
  76. )
  77. 4: Stmt_Expression(
  78. expr: Expr_NullsafeMethodCall(
  79. var: Expr_Variable(
  80. name: this
  81. )
  82. name: Identifier(
  83. name: foo
  84. )
  85. args: array(
  86. 0: VariadicPlaceholder(
  87. )
  88. )
  89. )
  90. )
  91. 5: Stmt_Function(
  92. attrGroups: array(
  93. 0: AttributeGroup(
  94. attrs: array(
  95. 0: Attribute(
  96. name: Name(
  97. parts: array(
  98. 0: Foo
  99. )
  100. )
  101. args: array(
  102. 0: VariadicPlaceholder(
  103. )
  104. )
  105. )
  106. )
  107. )
  108. )
  109. byRef: false
  110. name: Identifier(
  111. name: foo
  112. )
  113. params: array(
  114. )
  115. returnType: null
  116. stmts: array(
  117. )
  118. )
  119. )