Псалом сообщает InvalidArrayOffset, но значение будет в допустимых пределах

Запуск Псалма на этом простом генераторе "случайных строк":

      $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 - Невозможно получить доступ к значению переменной $numbers с использованием смещения int, ожидая -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7

Чего я не понимаю, это то, что я получаю ошибку в одиннадцатой строке, а не на 4 строки раньше, когда я беру символы из $letters. Я делаю то же самое, но по второму псалму кажется, что нельзя сказать, что возвращение из random_int() будет в пределах допустимых значений, но может с первого раза.

Что я делаю не так и как заставить Psalm понять код?

Я знаю, что код работает , но не понимаю, почему первый $pass присвоение не вызывает ошибки, а вот второе -.

1 ответ

Код в порядке. Описанная здесь проблема отслеживается по адресу https://github.com/vimeo/psalm/issues/5458 .

Другие вопросы по тегам