PHP if条件语句运行时报count()参数类型错误如何解决?
PHP count()报错问题排查修复
问题代码
<?php if (count($payment_method) > 0 && !(count($payment_method) == 1 && implode('',$payment_method) == 'PayPal')); ?>
报错信息(含中文翻译)
原报错:Warning: count(): Parameter must be an array or an object that implements Countable in C:\xampp\htdocs\signup\templates\default\html\subscription.php on line 239
中文翻译:警告:count()函数的参数必须为数组或实现了Countable接口的对象,文件路径C:\xampp\htdocs\signup\templates\default\html\subscription.php,报错行号239
问题原因
- 直接触发警告的原因:
$payment_method变量的实际类型不符合count()函数的参数要求,既不是数组也没有实现Countable接口,该类警告在PHP 7.2及以上版本会默认抛出。 - 隐性语法错误:当前if语句末尾写了分号
;,会直接终止if判断的作用范围,后续你打算和if判断绑定的业务逻辑不会受到条件控制,即使条件不满足也会执行。
修复方案
先对$payment_method做类型兼容处理,再执行判断逻辑,同时去掉if末尾的无效分号,补充逻辑包裹的大括号:
<?php // 类型兼容处理:不符合计数要求的变量统一转为空数组,避免count报错 $payment_method = is_array($payment_method) || $payment_method instanceof Countable ? $payment_method : []; // 提前计算count结果,避免重复调用 $payment_method_count = count($payment_method); if ($payment_method_count > 0 && !($payment_method_count == 1 && implode('',$payment_method) == 'PayPal')) { // 此处写入你需要执行的业务逻辑 } ?>
内容的提问来源于stack exchange,提问作者Ella Oscar
相关产品推荐
相关产品推荐

