升级PHP版本后出现Deprecated错误的解决方法及原因
错误原因
PHP 8.0及后续版本(包括8.1)收紧了类型转换的规则,intdiv()函数要求两个参数必须是整数类型。在PHP 7.4及更早版本中,传入浮点数会被自动隐式截断为整数(比如13.5会被转成13),但从PHP 8.0开始,这种无明确声明的隐式转换会触发「精度丢失」的弃用警告,到PHP 8.1直接抛出Deprecated Functionality异常。
解决方法
核心是显式将浮点数转换为整数,匹配intdiv()的参数要求,同时保留原逻辑:
- 方式一:使用强制类型转换,直接截断浮点数的小数部分,和你原代码的隐式转换逻辑完全一致:
echo ((float)13.5 + intdiv((int)13.5, (int)10) * (float)2.5 / (int)12);
- 方式二:如果需要更清晰的语义(比如处理负数场景时明确向下取整),可以用
floor()函数后再转整数:
echo ((float)13.5 + intdiv((int)floor(13.5), (int)10) * (float)2.5 / (int)12);
内容的提问来源于stack exchange,提问作者m2dev
相关产品推荐
相关产品推荐

