File tree Expand file tree Collapse file tree 2 files changed +65
-0
lines changed
tests/PHPStan/Rules/Functions Expand file tree Collapse file tree 2 files changed +65
-0
lines changed Original file line number Diff line number Diff line change @@ -1742,6 +1742,12 @@ public function testNoNamedArguments(): void
1742
1742
]);
1743
1743
}
1744
1744
1745
+ public function testBug11056 (): void
1746
+ {
1747
+ $ this ->checkExplicitMixed = true ;
1748
+ $ this ->analyse ([__DIR__ . '/data/bug-11056.php ' ], []);
1749
+ }
1750
+
1745
1751
public function testBug11506 (): void
1746
1752
{
1747
1753
$ this ->analyse ([__DIR__ . '/data/bug-11506.php ' ], []);
Original file line number Diff line number Diff line change
1
+ <?php declare (strict_types = 1 );
2
+
3
+ namespace Bug11056 ;
4
+
5
+ interface Item {}
6
+ class A implements Item {}
7
+ class B implements Item {}
8
+ class C implements Item {}
9
+
10
+ /**
11
+ * @template T
12
+ * @param class-string<T>|string $class
13
+ * @return ($class is class-string<T> ? T : mixed)
14
+ */
15
+ function createA (string $ class ) {
16
+ return new $ class ();
17
+ }
18
+
19
+ /**
20
+ * @template T
21
+ * @param class-string<T> $class
22
+ * @return T
23
+ */
24
+ function createB (string $ class ) {
25
+ return new $ class ();
26
+ }
27
+
28
+ /**
29
+ * @param Item[] $values
30
+ */
31
+ function receive (array $ values ): void { }
32
+
33
+ receive (
34
+ array_map (
35
+ createA (...),
36
+ [ A::class, B::class, C::class ]
37
+ )
38
+ );
39
+
40
+ receive (
41
+ array_map (
42
+ createB (...),
43
+ [ A::class, B::class, C::class ]
44
+ )
45
+ );
46
+
47
+ receive (
48
+ array_map (
49
+ static fn ($ val ) => createA ($ val ),
50
+ [ A::class, B::class, C::class ]
51
+ )
52
+ );
53
+
54
+ receive (
55
+ array_map (
56
+ static fn ($ val ) => createB ($ val ),
57
+ [ A::class, B::class, C::class ]
58
+ )
59
+ );
You can’t perform that action at this time.
0 commit comments