微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

诗篇报告 InvalidArrayOffset,但值将在边界内

如何解决诗篇报告 InvalidArrayOffset,但值将在边界内

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

错误: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 处进行跟踪。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?