📅  最后修改于: 2023-12-03 15:18:27.598000             🧑  作者: Mango
在PHP中,我们可以通过使用继承来扩展类的功能,从而提高代码的复用性。而在继承中,protected方法与属性是在类及其子类中可见的。但是当我们需要在子类中调用父类的protected方法时,该怎么办呢?
在学习如何从子类中访问受保护的方法之前,我们需要先理解PHP中的访问控制原则。PHP的访问控制主要包括以下三种访问控制修饰符:
当我们需要从子类中访问父类的protected方法时,可以通过以下两种方式实现:
在子类中,我们可以使用parent关键字来访问父类中的protected方法。以下是一个示例:
class Father {
protected function name() {
return "My name is Father.";
}
}
class Son extends Father {
public function showName() {
return parent::name();
}
}
$son = new Son();
echo $son->showName(); // 输出:My name is Father.
在上面的示例中,我们先定义了一个Father类,其中包含一个protected方法name。接着,在Son类中,我们定义了一个public方法showName,该方法使用parent关键字来调用父类中的name方法,并将其返回。然后,我们创建了一个Son类的实例$son,并调用了其showName方法,该方法输出了My name is Father。
除了使用parent关键字,我们还可以通过$this关键字来访问父类中的protected方法。以下是一个示例:
class Father {
protected function name() {
return "My name is Father.";
}
}
class Son extends Father {
public function showName() {
return $this->name();
}
}
$son = new Son();
echo $son->showName(); // 输出:My name is Father.
在上面的示例中,我们同样先定义了一个Father类,其中包含一个protected方法name。接着,在Son类中,我们定义了一个public方法showName,该方法使用$this关键字来调用父类中的name方法,并将其返回。然后,我们创建了一个Son类的实例$son,并调用了其showName方法,该方法同样输出了My name is Father。
在PHP中,我们可以通过使用parent关键字或$this关键字来访问父类中的protected方法。相比之下,使用parent关键字更加常见,因为它能强制执行继承关系。但是,在某些特定的场景下,使用$this关键字也是可行的。
参考文献: