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();

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

Cats萌萌
浏览 545回答 3
3回答

慕田峪9158850

子类继承了父类,所以那个属性就是子类的对象实例的属性了。 没错,非静态属性是属于对象实例的,不是属于类的,所以不分子类父类。 静态属性才是属于类的,才能通过parent::、static::、self::这些关键字来访问。 方法也是类似的。

噜噜哒

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

白猪掌柜的

不是静态变量啊
打开App,查看更多内容
随时随地看视频慕课网APP