stripos(): 传递字符串字符时出现非字符串针警告

stripos(): Non-string needles warning when passing string characters

将我的服务器升级到 PHP 7.3 后,我开始看到如下警告:

PHP Deprecated: stripos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior...

参考以下代码: if (stripos($checkforcomma, "," !== 0))

为什么它将逗号视为字符串字符以外的东西?按照错误消息中的建议,chr(44) 会输出一个逗号,实际上当我将“,”换成 chr(44) 时会生成完全相同的错误消息。

正如 Jeto 对您的问题发表的评论,解决此问题的方法是将拼写错误更正为

if (stripos($checkforcomma, ",") !== 0)

我认为值得指出的是,修复此拼写错误以停止弃用通知将改变您的程序的工作方式。使用当前代码,即使没有警告,它也没有按照预期执行。

您正在有效地检查字符串中的 chr(1) 而不是逗号,因为 "," != 0 的计算结果为 true,它将转换为 int 1 以在 stripos 中使用.

除非你有时在一些 $checkforcomma 字符串的中间有一个 chr(1) 那么任何应该在 if 里面发生的事情都不会发生,所以在你修复之后您的程序的错字将更有可能执行以前可能从未 运行 的代码。假设在此之前一切看起来都正常工作,那可能会导致其他问题。

您可能已经意识到这种可能性,但我认为为将来可能遇到此问题的有类似问题的人添加一点警告可能会有所帮助。