我刚刚开始升级我的代码以兼容 php 8.1。我有很多代码片段,我将潜在的空值传递给内部函数。
if (strlen($row) > 0) {
...
}
其中 $row 来自可能具有空值的源(例如查询)。这可能会生成弃用警告;在这种情况下:
已弃用:strlen():已弃用将 null 传递给字符串类型的参数 #1 ($string)
我正在寻找最简单、最省时的方法来处理升级此代码,例如修复可以进行全局搜索和替换的地方。似乎对我传递给内部函数的变量进行类型转换,无需更改功能。
error_reporting(E_ALL);
$row = null;
if (strlen((string) $row) > 0) {
...
}
除了以这种方式编码的道德方面之外,这种内部功能方法是否存在问题?有没有更好的方法(除了完全重写代码并以不同的方式处理空值之外)?我更喜欢这个向后兼容 v7.4 的解决方案,尽管我可能会兼容 8.0。
我知道我的用户定义函数还有其他选择。
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
如果您明确尝试处理
null的情况,那么稍微干净一点的修复方法是strlen($row ?? '')使用“null合并运算符”。在大多数情况下,两者可能是等效的,但在
strict_types=1生效的情况下,如果值是可以转换为字符串的其他类型,则它们的行为会有所不同:另一方面,请注意
??运算符基于isset,而不是=== null,因此 未定义变量的行为会有所不同:如果您关心这种情况,与旧行为最直接等效的代码会更加冗长: