You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

用count()修复WordPress插件中sizeof引发的PHP新版本报错问题

方案合理性说明

你当前的修改是完全合理且可以解决高版本PHP报错问题的,原因如下:

  • sizeof本质是count的别名,两者功能完全一致,高版本PHP(7.2及以上)会对非可计数类型(比如null、非数组的标量值)调用count/sizeof抛出E_WARNING警告,这就是你升级PHP后报错的根本原因:当页面没有子页面时,$page_info[$front_page]['children']的取值大概率为null而非空数组,原代码直接调用sizeof就会触发警告。
  • 你采用的count((array)$变量)写法,通过强制类型转换把所有非数组类型的值统一转为数组:如果原变量是null会转为空数组,count结果为0,完全符合原代码的判断逻辑;如果原变量本身就是数组,转换后取值不变,也不会影响判断,同时完全避免了非可计数类型的报错。

潜在的可优化点

你的修改已经可以覆盖绝大多数正常场景,仅存在极端情况下的逻辑隐患:如果$page_info[$front_page]['children']在异常场景下返回了字符串、数字等非数组非空值,强制转为数组后的count结果会大于0,可能误判为存在子页面,和原代码的预期逻辑不符。
如果需要更严谨的兼容方案,可以根据你的PHP版本选择对应写法:

  1. PHP 7.3及以上版本,用is_countable判断:
if (($args['show_home'] == 'yes') || (is_countable($page_info[$front_page]['children']) && count($page_info[$front_page]['children']))) {
    $page_info[$front_page]['show'] = 1;  // always show front page
}
  1. 需要兼容更低PHP版本的话,用is_array判断:
if (($args['show_home'] == 'yes') || (is_array($page_info[$front_page]['children']) && count($page_info[$front_page]['children']))) {
    $page_info[$front_page]['show'] = 1;  // always show front page
}

以上两种写法的逻辑和原代码的预期完全一致,且不会出现类型转换导致的误判问题。

内容的提问来源于stack exchange,提问作者ultraloveninja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 14:54:03