问题描述
$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)];
}
错误:InvalidArrayOffset - 15:11 - 无法使用 int 偏移访问变量 $numbers 上的值,需要 -8|-7|-6|-5|-4|-3|-2|-1|0| 1|2|3|4|5|6|7
我不明白的是,当我从 $letters
获取字符时,我在第 11 行而不是前 4 行收到错误。
我两次做的完全一样,但在第二次上,似乎 psalm 无法从 random_int()
推断出可能的返回值,并且它们将在可接受的值内。然而它可以是第一次。
我做错了什么,我怎样才能让 Psalm 理解代码?
我知道代码 works,但我很困惑为什么第一个 $pass
赋值不会触发错误,而第二个却会。
解决方法
代码没问题。此处描述的问题在 https://github.com/vimeo/psalm/issues/5458 处进行跟踪。