PHP非数值报错修复:custom_point.php第257行减法运算异常求助
问题原因
报错是因为执行减法运算的$duration和$stored_date至少有一个为非数值类型,触发了PHP 7.1及以上版本的非数值运算警告:
- 代码里的
$duration通过WordPress核心函数get_option()取值,该函数默认返回字符串格式,哪怕后台设置项存的是数字,取出后也是字符串类型,无法直接参与数值运算。 - 另外需要确认
$stored_date的取值逻辑,正常按注释里的时间差计算逻辑,它应该是Unix时间戳格式的整数,要是它实际是日期字符串,也会触发该报错。
修复方案
对两个变量先做类型转换后再参与运算,修复后的代码如下:
$duration = get_option("wc_settings_tab_period_of_changes",true); // 转为整数类型,可根据业务需要调整默认值,这里默认值为0 $duration = intval($duration); // 确保$stored_date为整数格式的时间戳,如果$stored_date原本是日期字符串,替换为$stored_date = strtotime($stored_date); $stored_date = intval($stored_date); $diff = $duration - $stored_date; //$diff = abs(round($diff / 86400)); if($duration == 0) { // 原有后续逻辑 }
如果有业务校验需要,还可以在运算前增加合法性判断,避免无效值干扰后续逻辑:
if ($duration > 0 && $stored_date > 0) { $diff = $duration - $stored_date; } else { // 自定义非法值处理逻辑,比如给$diff赋默认值 $diff = 0; }
内容的提问来源于stack exchange,提问作者makmerghen
相关产品推荐
相关产品推荐

