-
Notifications
You must be signed in to change notification settings - Fork 501
/
Copy pathbug-11928.php
68 lines (51 loc) · 1.57 KB
/
bug-11928.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php
namespace Bug11928;
use function PHPStan\Testing\assertType;
function doFoo()
{
$a = [2 => 1, 3 => 2, 4 => 1];
$keys = array_keys($a, 1); // returns [2, 4]
assertType('list<2|3|4>', $keys);
$keys = array_keys($a); // returns [2, 3, 4]
assertType('array{2, 3, 4}', $keys);
}
/**
* @param array<1|2|3, 4|5|6> $unionKeyedArray
* @param 4|5 $fourOrFive
* @return void
*/
function doFooStrings($unionKeyedArray, $fourOrFive) {
$a = [2 => 'hi', 3 => '123', 'xy' => 5];
$keys = array_keys($a, 1);
assertType("list<2|3|'xy'>", $keys);
$keys = array_keys($a);
assertType("array{2, 3, 'xy'}", $keys);
$keys = array_keys($unionKeyedArray, 1);
assertType("list<1|2|3>", $keys); // could be array{}
$keys = array_keys($unionKeyedArray, 4);
assertType("list<1|2|3>", $keys);
$keys = array_keys($unionKeyedArray, $fourOrFive);
assertType("list<1|2|3>", $keys);
$keys = array_keys($unionKeyedArray);
assertType("list<1|2|3>", $keys);
}
/**
* @param array<int, int> $array
* @param list<int> $list
* @param array<string, string> $strings
* @return void
*/
function doFooBar(array $array, array $list, array $strings) {
$keys = array_keys($strings, "a", true);
assertType('list<string>', $keys);
$keys = array_keys($strings, "a", false);
assertType('list<string>', $keys);
$keys = array_keys($array, 1, true);
assertType('list<int>', $keys);
$keys = array_keys($array, 1, false);
assertType('list<int>', $keys);
$keys = array_keys($list, 1, true);
assertType('list<int<0, max>>', $keys);
$keys = array_keys($list, 1, true);
assertType('list<int<0, max>>', $keys);
}