Psalm 报告 InvalidArrayOffset,但该值将在范围内
Psalm reports InvalidArrayOffset, but the value will be within bounds
当 运行 Psalm 在这个简单的“随机字符串”生成器上:
$letters = 'abcdefghjklmnpqrstuvwxyz';
$numbers = '23456789';
$number_count = \strlen($numbers);
$letter_count = \strlen($letters);
$pass = '';
while (\strlen($pass) < 9) {
$pass .= $letters[\random_int(0, $letter_count - 1)];
}
while (\strlen($pass) < 12) {
$pass .= $numbers[\random_int(0, $number_count - 1)];
}
我收到一个错误(如 here 所示):
ERROR: InvalidArrayOffset - 15:11 - Cannot access value on variable $numbers using a int offset, expecting -8|-7|-6|-5|-4|-3|-2|-1|0|1|2|3|4|5|6|7
我不明白的是,当我从 $letters
.
中获取字符时,我在第 11 行收到错误,而不是之前的 4 行
我两次都做同样的事情,但在第二次看来 psalm 无法从 random_int()
推断出可能的 return 值,并且它们将在可接受的值范围内.然而它还是第一次。
我做错了什么,我怎样才能让 Psalm 理解代码?
我知道代码 works,但我很困惑为什么第一个 $pass
赋值没有触发错误,而第二个却触发错误。
跟踪了此处描述的问题
当 运行 Psalm 在这个简单的“随机字符串”生成器上:
$letters = 'abcdefghjklmnpqrstuvwxyz';
$numbers = '23456789';
$number_count = \strlen($numbers);
$letter_count = \strlen($letters);
$pass = '';
while (\strlen($pass) < 9) {
$pass .= $letters[\random_int(0, $letter_count - 1)];
}
while (\strlen($pass) < 12) {
$pass .= $numbers[\random_int(0, $number_count - 1)];
}
我收到一个错误(如 here 所示):
ERROR: InvalidArrayOffset - 15:11 - Cannot access value on variable $numbers using a int offset, expecting -8|-7|-6|-5|-4|-3|-2|-1|0|1|2|3|4|5|6|7
我不明白的是,当我从 $letters
.
我两次都做同样的事情,但在第二次看来 psalm 无法从 random_int()
推断出可能的 return 值,并且它们将在可接受的值范围内.然而它还是第一次。
我做错了什么,我怎样才能让 Psalm 理解代码?
我知道代码 works,但我很困惑为什么第一个 $pass
赋值没有触发错误,而第二个却触发错误。