Псалом сообщает 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 .