PHP中的OOP可见性

时间:2014-09-01 07:49:09

标签: php oop

我最近在PHP中开始了OOP,而且我处于可见性概念(公共,受保护,私有)。在这里,我对保护的可见性感到困惑。受保护的成员只能在声明的clas或子类或子类中访问。我在PHP的网站上有这个例子:

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

    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}


class MyClass2 extends MyClass
{
    // We can redeclare the public and protected method, but not private
    protected $protected = 'Protected2';

    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}

$obj2 = new MyClass2();
echo $obj2->public; // Works
echo $obj2->protected; // Fatal Error
echo $obj2->private; // Undefined
$obj2->printHello(); // Shows Public, Protected2, Undefined

在最后一行(echo $obj2->protected; // Fatal Error)的此代码中,它会产生致命错误。但是,在这种情况下,是否保护变量继承到子类,即MyClass2?为什么这个致命的错误呢?有人可以请教我这个吗?

1 个答案:

答案 0 :(得分:2)

  

受保护的成员只能在声明类中 中访问   子类或子类。

您必须注意

您因为从$protectedMyClass2以外的MyClass访问MyClass2而导致致命错误。

中表示您可以MyClass2::printHello()MyClass::printHello()和/或{{1}}方法进行访问。