【问题标题】:how to use protected in parent classes in php?如何在php的父类中使用protected?
【发布时间】:2013-06-22 08:08:37
【问题描述】:

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

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

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

protected 只能在类本身中访问,并且可以通过 继承类和父类。

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

【问题讨论】:

    标签: php


    【解决方案1】:

    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。父母不应以任何其他方式“了解”其子女,因此无需访问其中的某些内容。

    【讨论】:

    • 似乎我们在Foo类中不需要这个函数:protected function baz() { },我们可以使用下面的代码作为父类如何访问保护的一个例子,<?php class Foo { public function bar() { $this->baz(); } } class Child extends Foo { protected function baz() { echo 'Ha!'; } } $obj = new Child(); $obj ->bar();
    • 重点是Foo应该声明baz(),否则不应该调用它!一个类不能简单地调用一个不存在的方法并期望一个孩子来实现它(嗯,它可以,但它是混乱的)。
    【解决方案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
         }
     }
    

    【讨论】:

      猜你喜欢
      • 2017-03-13
      • 2020-05-31
      • 2012-10-08
      • 2014-01-02
      • 2022-07-28
      • 2023-01-18
      • 2019-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多