attributes.phpt 874 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. --TEST--
  2. Named params in attributes
  3. --FILE--
  4. <?php
  5. #[Attribute]
  6. class MyAttribute {
  7. public function __construct(
  8. public $a = 'a',
  9. public $b = 'b',
  10. public $c = 'c',
  11. ) {}
  12. }
  13. #[MyAttribute('A', c: 'C')]
  14. class Test1 {}
  15. #[MyAttribute('A', a: 'C')]
  16. class Test2 {}
  17. $attr = (new ReflectionClass(Test1::class))->getAttributes()[0];
  18. var_dump($attr->getName());
  19. var_dump($attr->getArguments());
  20. var_dump($attr->newInstance());
  21. $attr = (new ReflectionClass(Test2::class))->getAttributes()[0];
  22. try {
  23. var_dump($attr->newInstance());
  24. } catch (Error $e) {
  25. echo $e->getMessage(), "\n";
  26. }
  27. ?>
  28. --EXPECT--
  29. string(11) "MyAttribute"
  30. array(2) {
  31. [0]=>
  32. string(1) "A"
  33. ["c"]=>
  34. string(1) "C"
  35. }
  36. object(MyAttribute)#1 (3) {
  37. ["a"]=>
  38. string(1) "A"
  39. ["b"]=>
  40. string(1) "b"
  41. ["c"]=>
  42. string(1) "C"
  43. }
  44. Named parameter $a overwrites previous argument