013_class_scope.phpt 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. --TEST--
  2. Attributes make use of class scope.
  3. --FILE--
  4. <?php
  5. #[A1(self::class, self::FOO)]
  6. class C1
  7. {
  8. #[A1(self::class, self::FOO)]
  9. private const FOO = 'foo';
  10. #[A1(self::class, self::FOO)]
  11. public $a;
  12. #[A1(self::class, self::FOO)]
  13. public function bar(#[A1(self::class, self::FOO)] $p) { }
  14. }
  15. $ref = new \ReflectionClass(C1::class);
  16. print_r($ref->getAttributes()[0]->getArguments());
  17. print_r($ref->getReflectionConstant('FOO')->getAttributes()[0]->getArguments());
  18. print_r($ref->getProperty('a')->getAttributes()[0]->getArguments());
  19. print_r($ref->getMethod('bar')->getAttributes()[0]->getArguments());
  20. print_r($ref->getMethod('bar')->getParameters()[0]->getAttributes()[0]->getArguments());
  21. echo "\n";
  22. trait T1
  23. {
  24. #[A1(self::class, self::FOO)]
  25. public function foo() { }
  26. }
  27. class C2
  28. {
  29. use T1;
  30. private const FOO = 'bar';
  31. }
  32. $ref = new \ReflectionClass(C2::class);
  33. print_r($ref->getMethod('foo')->getAttributes()[0]->getArguments());
  34. $ref = new \ReflectionClass(T1::class);
  35. $attr = $ref->getMethod('foo')->getAttributes()[0];
  36. try {
  37. $attr->getArguments();
  38. } catch (\Error $e) {
  39. var_dump('ERROR 1', $e->getMessage());
  40. }
  41. echo "\n";
  42. class C3
  43. {
  44. private const FOO = 'foo';
  45. public static function foo()
  46. {
  47. return new #[A1(self::class, self::FOO)] class() {
  48. private const FOO = 'bar';
  49. #[A1(self::class, self::FOO)]
  50. public function bar() { }
  51. };
  52. }
  53. }
  54. $ref = new \ReflectionObject(C3::foo());
  55. $args = $ref->getAttributes()[0]->getArguments();
  56. var_dump($args[0] == $ref->getName(), $args[1]);
  57. $args = $ref->getMethod('bar')->getAttributes()[0]->getArguments();
  58. var_dump($args[0] == $ref->getName(), $args[1]);
  59. ?>
  60. --EXPECT--
  61. Array
  62. (
  63. [0] => C1
  64. [1] => foo
  65. )
  66. Array
  67. (
  68. [0] => C1
  69. [1] => foo
  70. )
  71. Array
  72. (
  73. [0] => C1
  74. [1] => foo
  75. )
  76. Array
  77. (
  78. [0] => C1
  79. [1] => foo
  80. )
  81. Array
  82. (
  83. [0] => C1
  84. [1] => foo
  85. )
  86. Array
  87. (
  88. [0] => C2
  89. [1] => bar
  90. )
  91. string(7) "ERROR 1"
  92. string(28) "Undefined constant self::FOO"
  93. bool(true)
  94. string(3) "bar"
  95. bool(true)
  96. string(3) "bar"