PHP5迁移PHP7遇substr()参数类型错误,求解决方案
PHP5迁移至PHP7:substr()参数类型错误解决方案
问题原因
PHP7对函数参数的类型检查比PHP5更严格,原代码中$len是通过substr()获取的字符串类型值,但substr()的第三个参数要求必须是整数。PHP5会自动隐式转换字符串数字为整数,PHP7不再允许这种隐式转换,因此抛出substr() expects parameter 3 to be integer, string given错误。
解决方案
将$len强制转换为整数类型,同时修正$offset计算时的类型问题(避免字符串参与数学运算导致意外结果):
修改后的代码:
public function decode( &$raw, &$offset ) { $end = strpos( $raw, ":", $offset ); // 将截取到的长度字符串转为整数 $len = (int) substr( $raw, $offset, $end - $offset ); // 确保$len是整数后再参与运算 $offset += $len + ( $end - $offset ); ++$end; // 第三个参数传入整数类型的$len $this->value = substr($raw, $end, $len); }
关键修改点
- 对
substr()获取的$len使用(int)强制类型转换,确保它是整数 - 由于
$offset的计算依赖$len,转换后能避免字符串与整数相加的潜在问题
内容的提问来源于stack exchange,提问作者braga
相关产品推荐
相关产品推荐

