在面向对象编程中,子类继承其父类的属性和方法。然而,直接在子类中访问父类变量有时会带来挑战。
考虑以下代码片段,其中 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中文网其他相关文章!