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

引入含$this的PHP文件报非对象上下文使用$this错误如何解决

错误原因

你的报错本质是file5.php原本是某类内部加载的片段代码,上下文依赖类实例$this,你直接在类外的file1.php中独立引入该文件时,不存在对应的类实例,所以$this调用无效。

解决方案

方案1:修改file5.php适配独立调用(适配你提到的get_instance()框架场景)

把所有$this替换为框架单例实例即可,同时修正全局变量赋值的问题:

<?php
// 顶部先获取框架单例实例
$ins = get_instance();
if ( !$ins->is_users_rating_disabled() ):
    $score = isset( $ins->users_data['overall'] ) ? $ins->users_data['overall'] : 0;
    $count = isset( $ins->users_data['count'] ) ? $ins->users_data['count'] : 0;
    $theme = $ins->template_field('template_theme', true);
    $maximum_score = $ins->template_field('template_maximum_score', true);
    $revOver = $score;
    // 注意全局变量名大小写敏感,和变量名保持一致
    $GLOBALS['revOver'] = $revOver;
// 原代码缺少if闭合标签,补充上
endif;
?>

你之前全局变量不生效有两个常见原因:

  • 原代码的if语句没有闭合,$revOver赋值逻辑可能根本没有执行
  • 全局变量名大小写不一致,你之前写的是GLOBALS['revover']全小写,和$revOver大小写不匹配,PHP大小写敏感无法识别

修改完成后你在file1.php里先引入file5.php,就能直接用$GLOBALS['revOver']拿到值。

方案2:无需修改file5.php,直接封装方法调用(更推荐)

找到is_users_rating_disabled()方法所属的类,新增一个公共方法对外暴露你需要的$revOver值:

public function get_rev_over()
{
    if ( !$this->is_users_rating_disabled() ) {
        return isset( $this->users_data['overall'] ) ? $this->users_data['overall'] : 0;
    }
    return 0;
}

之后你在file1.php中不需要引入file5.php,直接调用该方法即可拿到值:

$ins = get_instance();
$revOver = $ins->get_rev_over();

这个方案不会破坏原有file5.php的逻辑,也不需要依赖全局变量,可维护性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:36:07