1

在本教程(http://www.techflirt.com/tutorials/oop-in-php/visibility-in-php-classes.html)中,它说:

受保护:具有受保护可见性的方法或变量只能在派生类中访问。或者换句话说,在儿童班。受保护的将在继承过程中使用。

这里(http://php.net/manual/en/language.oop5.visibility.php)据说:

protected 只能在类本身以及继承类和父类中访问。

我们经常在继承类中使用 Protected,所以我想知道这是如何工作的:protected 可以被类访问,谁能给我一个例子?谢谢。

4

2 回答 2

3

protected真正允许继承链中的任何类访问。只有一种情况,子属性或方法会/应该被父级访问:父级声明并调用一个protected方法,而子级会覆盖它。

class Foo {

    public function bar() {
        $this->baz();
    }

    protected function baz() { }

}

class Child extends Foo {

    protected function baz() {
        echo 'Ha!';
    }

}

调用时$child->bar(),这要求Foo::bar可以访问Child::baz。父母不应该以任何其他方式“了解”其孩子,因此无需访问其中的某些内容。

于 2013-06-22T08:15:52.023 回答
2

可以从定义它的类访问受保护的任何继承类。

例如

 class test {
     protected function foo() {

     }

     public function foobar() {
          $this->foo(); //is allowed here
     }
 }

 class testa extends test {
     public function bar() {
          $this->foo(); //is allowed here
     }
 }
于 2013-06-22T08:14:50.450 回答