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

PHP OOP代码无输出问题求助:无法定位错误原因

嘿,我一眼就瞅出你这段PHP代码的问题啦!咱们一点点捋清楚:

核心错误:静态方法误用$this

你定义的doSomething()是静态方法(加了static关键字),但方法里却用了$this->bar——这是PHP面向对象里的典型错误:

  • $this代表当前类的实例对象,只有在非静态的成员方法里才能使用;
  • 静态方法属于类本身,不依附任何实例,调用它的时候根本没有实例对象存在,所以PHP会直接抛出错误(如果你的错误显示被关闭了,可能看不到报错,但代码确实无法正常执行)。
两种修复方案

根据你的需求,有两种可行的修改方向:

方案一:把方法改成非静态(更符合当前代码逻辑)

如果$bar是每个实例独有的属性,那就把static关键字去掉,然后实例化类、调用方法并输出结果:

class Foo { 
    protected $bar; 
    public function __construct() { 
        $this->bar = 1; 
    } 
    // 移除static关键字,改成普通成员方法
    public function doSomething() { 
        return $this->bar; 
    } 
}

// 必须实例化类才能调用成员方法,并且要echo输出返回值
$fooInstance = new Foo();
echo $fooInstance->doSomething(); // 这时候会输出1

方案二:改为静态属性+静态方法(如果需要类级别的共享数据)

如果$bar是所有实例共享的静态数据,那就把$bar改成静态属性,用self::来访问:

class Foo { 
    // 把$bar改成静态属性
    protected static $bar; 
    // 或者直接在静态方法里初始化,不需要依赖构造方法
    public static function doSomething() { 
        self::$bar = 1; // 初始化静态属性
        return self::$bar; 
    } 
}

// 静态方法直接通过类名调用,同样要echo输出
echo Foo::doSomething(); // 输出1
额外提醒:代码没输出的另一个原因

你原来的代码只定义了类,却没有调用方法,也没有输出返回值——哪怕方法写对了,不执行调用、不把返回值echo出来,自然看不到任何内容哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:29:54