You need to enable JavaScript to run this app. WordPress插件静态方法用$this在PHP7.1正常7.4.20报错原因咨询
优惠活动
大模型
产品
解决方案
定价
更多

WordPress插件静态方法用$this在PHP7.1正常7.4.20报错原因咨询

版本差异原因

  • $this是类实例指针,仅在类的非静态方法上下文中有效,静态方法不依赖类实例初始化就可调用,本身语法层面就不支持访问$this
  • PHP 7.1及更早版本仅会对静态方法内使用$this的行为抛出E_STRICT级别警告,不会阻断代码执行,大部分生产环境默认屏蔽E_STRICT级别的错误提示,因此你会误认为该代码可以正常运行
  • 从PHP 7.2版本开始,该违规行为被正式升级为编译阶段致命错误,只要检测到静态方法内存在$this调用就会直接抛出PHP Fatal error: Using $this when not in object context错误终止运行,没有兼容空间。

适配修复方案

针对你的WordPress插件场景,有两种快速修复方式:

方案1:移除不必要的static修饰符(更推荐)

该方法需要调用实例的回调方法,本身不需要定义为静态,直接去掉static修饰符即可兼容所有版本:

public function add_test_shortcode_metabox( $post ) {
    add_meta_box(
            'test-shortcode-metabox',
            esc_html__( 'Shortcode', 'theme-extensions' ),
            array( $this, 'display_test_shortcode_metabox' ) ,
            'theme_test',
            'side',
            'low'
        );
}

方案2:保留静态定义,调整为静态回调

如果业务逻辑必须保留该方法的静态属性,将回调改为类名静态调用即可,同步修改对应的回调方法为静态:

public static function add_test_shortcode_metabox( $post ) {
    add_meta_box(
            'test-shortcode-metabox',
            esc_html__( 'Shortcode', 'theme-extensions' ),
            array( __CLASS__, 'display_test_shortcode_metabox' ) ,
            'theme_test',
            'side',
            'low'
        );
}

// 同步修改对应回调方法为静态
public static function display_test_shortcode_metabox() {
    // 原有回调逻辑保持不变
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 20:03:03