1--TEST--
2new in attribute arguments
3--FILE--
4<?php
5
6#[Attribute]
7class MyAttribute {
8    public function __construct(public $x, public $y) {}
9}
10
11#[MyAttribute(null, new stdClass)]
12class Test1 {
13}
14
15$rc = new ReflectionClass(Test1::class);
16$ra = $rc->getAttributes()[0];
17$args1 = $ra->getArguments();
18$obj1 = $ra->newInstance();
19var_dump($args1, $obj1);
20
21// Check that we get fresh instances each time:
22$args2 = $ra->getArguments();
23$obj2 = $ra->newInstance();
24var_dump($args1[1] !== $args2[1]);
25var_dump($obj1->y !== $obj2->y);
26
27// Check that named args work:
28#[MyAttribute(y: new stdClass, x: null)]
29class Test2 {
30}
31
32$rc = new ReflectionClass(Test2::class);
33$ra = $rc->getAttributes()[0];
34$args = $ra->getArguments();
35$obj = $ra->newInstance();
36var_dump($args, $obj);
37
38?>
39--EXPECT--
40array(2) {
41  [0]=>
42  NULL
43  [1]=>
44  object(stdClass)#3 (0) {
45  }
46}
47object(MyAttribute)#4 (2) {
48  ["x"]=>
49  NULL
50  ["y"]=>
51  object(stdClass)#5 (0) {
52  }
53}
54bool(true)
55bool(true)
56array(2) {
57  ["y"]=>
58  object(stdClass)#2 (0) {
59  }
60  ["x"]=>
61  NULL
62}
63object(MyAttribute)#10 (2) {
64  ["x"]=>
65  NULL
66  ["y"]=>
67  object(stdClass)#11 (0) {
68  }
69}
70