017_closure_scope.phpt 845 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. --TEST--
  2. Attributes make use of closure scope.
  3. --FILE--
  4. <?php
  5. class Test1
  6. {
  7. private const FOO = 'bar';
  8. }
  9. class C1
  10. {
  11. private const FOO = 'foo';
  12. public static function foo()
  13. {
  14. return #[A1(self::class, self::FOO)] function (#[A1(self::class, self::FOO)] $p) { };
  15. }
  16. }
  17. $ref = new \ReflectionFunction(C1::foo());
  18. print_r($ref->getAttributes()[0]->getArguments());
  19. print_r($ref->getParameters()[0]->getAttributes()[0]->getArguments());
  20. echo "\n";
  21. $ref = new \ReflectionFunction(C1::foo()->bindTo(null, Test1::class));
  22. print_r($ref->getAttributes()[0]->getArguments());
  23. print_r($ref->getParameters()[0]->getAttributes()[0]->getArguments());
  24. ?>
  25. --EXPECT--
  26. Array
  27. (
  28. [0] => C1
  29. [1] => foo
  30. )
  31. Array
  32. (
  33. [0] => C1
  34. [1] => foo
  35. )
  36. Array
  37. (
  38. [0] => Test1
  39. [1] => bar
  40. )
  41. Array
  42. (
  43. [0] => Test1
  44. [1] => bar
  45. )