PHP子类对象不能直接访问父类的属性吗

class MyClass
{
    public $public = 'Public';
    protected $protected = 'Protected';
    private $private = 'Private';

    function printHello()
    {
        echo "This is Myclass".PHP_EOL;
        echo $this->public.PHP_EOL;
        echo $this->protected,PHP_EOL;
        echo $this->private,PHP_EOL;
    }
}
class MyClass2 extends MyClass
{
    public $public = 'Publi2c';
    protected $protected = 'Protected2';
    
    function printHello2()
    {
        echo $this->public.PHP_EOL;
        echo $this->protected,PHP_EOL;
        echo parent::$public,PHP_EOL; //这里报错了。Uncaught Error: Access to undeclared static         
                                       //property: MyClass::$public
    }
}

$obj2 = new MyClass2();
$obj2->printHello2();

请问我注释这里为什么出错了?

阅读 3.3k
3 个回答

子类继承了父类,所以那个属性就是子类的对象实例的属性了。

没错,非静态属性是属于对象实例的,不是属于类的,所以不分子类父类。

静态属性才是属于类的,才能通过parent::static::self::这些关键字来访问。

方法也是类似的。

报错已经告诉你了,父级的$public 不是一个静态变量,应该使用$this->去获取

不是静态变量啊

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题