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
相关产品推荐
相关产品推荐

