PHP Notice问题排查:count()是否为报错元凶?
问题排查:PHP Notice报错分析
报错信息
PHP Notice: Object of class MyCourse could not be converted to int in /home/usr/public_html/wp-includes/post-template.php on line 310
post-template.php 第310行代码
if ( $elements['page'] > count( $elements['pages'] ) ) { // 如果请求的页面不存在 $elements['page'] = count( $elements['pages'] ); // 返回存在的最大编号页面 }
register_shortcodes() 中的类调用代码
if ( $has_course ) { // 如果需要随课程渲染测验 $entity = new MyCourse( array( 'id' => $post->post_parent ) ); $presenter = $entity->get_presenter(); }
问题场景
在旧代码库中排查H5P短代码时触发该报错。
技术疑问
是否是count()函数导致了这个PHP Notice报错?
分析与结论
不是count()直接引发的报错。问题的核心是$elements['pages']被错误赋值为MyCourse类的实例对象,而非预期的数组或可计数类型。
当count()接收未实现Countable接口的对象时,PHP会尝试将其转换为整数以完成计数操作,但MyCourse类不支持这种类型转换,因此触发了“无法将对象转换为整数”的Notice。
结合代码片段推测,H5P短代码的处理流程中存在逻辑错误,导致MyCourse实例被赋值给了$elements['pages']。需要检查该变量的赋值链路,确保它被设置为正确的页面数组类型,而非MyCourse对象。
内容的提问来源于stack exchange,提问作者Marine Valentonis
相关产品推荐
相关产品推荐

