attribute_arguments.phpt 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. --TEST--
  2. Verify that parameter attributes for native functions correctly support arguments.
  3. --EXTENSIONS--
  4. zend_test
  5. --FILE--
  6. <?php
  7. $reflection = new ReflectionFunction("zend_test_parameter_with_attribute");
  8. $attribute = $reflection->getParameters()[0]->getAttributes()[0];
  9. var_dump($attribute->getArguments());
  10. var_dump($attribute->newInstance());
  11. $reflection = new ReflectionMethod("ZendTestClassWithMethodWithParameterAttribute", "no_override");
  12. $attribute = $reflection->getParameters()[0]->getAttributes()[0];
  13. var_dump($attribute->getArguments());
  14. var_dump($attribute->newInstance());
  15. $reflection = new ReflectionMethod("ZendTestClassWithMethodWithParameterAttribute", "override");
  16. $attribute = $reflection->getParameters()[0]->getAttributes()[0];
  17. var_dump($attribute->getArguments());
  18. var_dump($attribute->newInstance());
  19. $reflection = new ReflectionMethod("ZendTestChildClassWithMethodWithParameterAttribute", "no_override");
  20. $attribute = $reflection->getParameters()[0]->getAttributes()[0];
  21. var_dump($attribute->getArguments());
  22. var_dump($attribute->newInstance());
  23. $reflection = new ReflectionMethod("ZendTestChildClassWithMethodWithParameterAttribute", "override");
  24. $attribute = $reflection->getParameters()[0]->getAttributes()[0];
  25. var_dump($attribute->getArguments());
  26. var_dump($attribute->newInstance());
  27. class ChildClassWithNoAttribute extends ZendTestClassWithMethodWithParameterAttribute {
  28. public function override(string $parameter): int
  29. {
  30. return 5;
  31. }
  32. }
  33. $reflection = new ReflectionMethod("ChildClassWithNoAttribute", "no_override");
  34. $attribute = $reflection->getParameters()[0]->getAttributes()[0];
  35. var_dump($attribute->getArguments());
  36. var_dump($attribute->newInstance());
  37. $reflection = new ReflectionMethod("ChildClassWithNoAttribute", "override");
  38. var_dump(count($reflection->getParameters()[0]->getAttributes()));
  39. class ChildClassWithSameAttribute extends ZendTestClassWithMethodWithParameterAttribute {
  40. public function override(#[ZendTestParameterAttribute("value5")] string $parameter): int
  41. {
  42. return 6;
  43. }
  44. }
  45. $reflection = new ReflectionMethod("ChildClassWithSameAttribute", "no_override");
  46. $attribute = $reflection->getParameters()[0]->getAttributes()[0];
  47. var_dump($attribute->getArguments());
  48. var_dump($attribute->newInstance());
  49. $reflection = new ReflectionMethod("ChildClassWithSameAttribute", "override");
  50. $attribute = $reflection->getParameters()[0]->getAttributes()[0];
  51. var_dump($attribute->getArguments());
  52. var_dump($attribute->newInstance());
  53. #[\Attribute(\Attribute::TARGET_PARAMETER)]
  54. class SomeAttribute {
  55. public function __construct(public string $someParam) { }
  56. }
  57. class ChildClassWithDifferentAttribute extends ZendTestClassWithMethodWithParameterAttribute {
  58. public function override(#[SomeAttribute("value6")] string $parameter): int
  59. {
  60. return 7;
  61. }
  62. }
  63. $reflection = new ReflectionMethod("ChildClassWithDifferentAttribute", "no_override");
  64. $attribute = $reflection->getParameters()[0]->getAttributes()[0];
  65. var_dump($attribute->getArguments());
  66. var_dump($attribute->newInstance());
  67. $reflection = new ReflectionMethod("ChildClassWithDifferentAttribute", "override");
  68. $attribute = $reflection->getParameters()[0]->getAttributes()[0];
  69. var_dump($attribute->getArguments());
  70. var_dump($attribute->newInstance());
  71. ?>
  72. --EXPECTF--
  73. array(1) {
  74. [0]=>
  75. string(6) "value1"
  76. }
  77. object(ZendTestParameterAttribute)#%d (1) {
  78. ["parameter"]=>
  79. string(6) "value1"
  80. }
  81. array(1) {
  82. [0]=>
  83. string(6) "value2"
  84. }
  85. object(ZendTestParameterAttribute)#%d (1) {
  86. ["parameter"]=>
  87. string(6) "value2"
  88. }
  89. array(1) {
  90. [0]=>
  91. string(6) "value3"
  92. }
  93. object(ZendTestParameterAttribute)#%d (1) {
  94. ["parameter"]=>
  95. string(6) "value3"
  96. }
  97. array(1) {
  98. [0]=>
  99. string(6) "value2"
  100. }
  101. object(ZendTestParameterAttribute)#%d (1) {
  102. ["parameter"]=>
  103. string(6) "value2"
  104. }
  105. array(1) {
  106. [0]=>
  107. string(6) "value4"
  108. }
  109. object(ZendTestParameterAttribute)#%d (1) {
  110. ["parameter"]=>
  111. string(6) "value4"
  112. }
  113. array(1) {
  114. [0]=>
  115. string(6) "value2"
  116. }
  117. object(ZendTestParameterAttribute)#%d (1) {
  118. ["parameter"]=>
  119. string(6) "value2"
  120. }
  121. int(0)
  122. array(1) {
  123. [0]=>
  124. string(6) "value2"
  125. }
  126. object(ZendTestParameterAttribute)#%d (1) {
  127. ["parameter"]=>
  128. string(6) "value2"
  129. }
  130. array(1) {
  131. [0]=>
  132. string(6) "value5"
  133. }
  134. object(ZendTestParameterAttribute)#%d (1) {
  135. ["parameter"]=>
  136. string(6) "value5"
  137. }
  138. array(1) {
  139. [0]=>
  140. string(6) "value2"
  141. }
  142. object(ZendTestParameterAttribute)#%d (1) {
  143. ["parameter"]=>
  144. string(6) "value2"
  145. }
  146. array(1) {
  147. [0]=>
  148. string(6) "value6"
  149. }
  150. object(SomeAttribute)#%d (1) {
  151. ["someParam"]=>
  152. string(6) "value6"
  153. }