如何在 PHP 子类中访问受保护的父类变量?

Patricia Arquette
发布: 2024-10-23 00:44:03
原创
287 人浏览过

How to Access Protected Parent Class Variables in PHP Subclasses?

在 PHP 中访问父类变量

在面向对象编程中,子类继承其父类的属性和方法。然而,直接在子类中访问父类变量有时会带来挑战。

考虑以下代码片段,其中 B 类扩展了 A 类:

<code class="php">class A {
    private $aa;
    protected $bb = 'parent bb';
    function __construct($arg) {}
    private function parentmethod($arg2) {}
}

class B extends A {
    function __construct($arg) {
        parent::__construct($arg);
    }
    function childfunction() {
        echo parent::$bb; //Fatal error: Undefined class constant 'bb' 
    }
}

$test = new B($some);
$test->childfunction();</code>
登录后复制

问题:

为什么该行会 echoparent::$bb;导致致命错误?如何在子类中访问父变量 $bb?

答案:

出现错误是因为 $bb 是 A 类的 protected 属性,而 protected不能使用parent:: 语法从类或子类外部直接访问属性。相反,我们可以使用以下语法访问 $bb:

<code class="php">echo $this->bb;</code>
登录后复制

说明:

$this 关键字引用当前对象。由于$bb被类B继承并成为当前对象的一部分,因此我们可以使用$this访问它。此语法有效地访问继承的变量,就好像它是子类的属性一样。

有关父类的附加信息::

parent:: 语法用于从子类中访问父类的方法或属性。当您想要重写父类的方法或向其添加额外的功能时,通常会使用它。

例如,考虑以下代码:

<code class="php">class Airplane {
    private $pilot;
    public function __construct( $pilot ) {
        $this->pilot = $pilot;
    }
}

class Bomber extends Airplane {
    private $navigator;
    public function __construct( $pilot, $navigator ) {
        $this->navigator = $navigator;
        parent::__construct( $pilot ); // Calls the parent constructor
    }
}</code>
登录后复制

在这种情况下, Bomber 类的 __construct() 方法覆盖了父类的 __construct() 方法,但仍然使用它来初始化 Pilot 属性。

以上是如何在 PHP 子类中访问受保护的父类变量?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!