PHP 8.1升级后strpos()空值传入报错的解决方案咨询
解决PHP 8.1中strpos()传null的弃用警告
PHP 8.1严格了参数类型检查,strpos()的第一个参数($haystack)要求必须是字符串,传null会触发弃用警告。针对你代码里的问题,有几种可行的修改方式:
先判断变量非null再执行strpos
这种方式明确区分$orderStatus为null和有效字符串的场景,只有当变量不为null时才检查下划线:if ($orderStatus !== null && strpos($orderStatus, '_') !== false) { // do stuff... }强制转换为字符串
把$orderStatus强制转为字符串,null会被转为空字符串,此时strpos('', '_')会返回false,逻辑和原代码在PHP7.4下的表现一致:if (strpos((string)$orderStatus, '_') !== false) { // do stuff... }使用null合并运算符设置默认值
当$orderStatus为null时,用空字符串替代,效果和强制转换类似,写法更简洁:if (strpos($orderStatus ?? '', '_') !== false) { // do stuff... }
如果你的业务逻辑中,$orderStatus为null时不需要执行后续代码,三种方法都可以;如果需要单独处理null的情况,优先选第一种。
内容的提问来源于stack exchange,提问作者Aknot
相关产品推荐
相关产品推荐

