0

在这个简单的“随机字符串”生成器上运行 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)];
}

我收到一个错误(如此处所示

错误:InvalidArrayOffset - 15:11 - 无法使用 int 偏移访问变量 $numbers 上的值,期望 -8|-7|-6|-5|-4|-3|-2|-1|0|1|2 |3|4|5|6|7

我不明白的是,当我从$letters.

两次我都在做完全相同的事情,但在第二次中,似乎 psalm 无法从 推断出可能的返回值random_int(),并且它们将在可接受的值范围内。然而它可以第一次。

我做错了什么,我怎样才能让 Psalm 理解代码?

我知道代码有效,但我很困惑为什么第一个$pass分配不会触发错误,但第二个会触发错误。

4

1 回答 1

2

代码很好。此处描述的问题在https://github.com/vimeo/psalm/issues/5458进行了跟踪。

于 2021-03-24T12:18:56.883 回答