📜  php 从子类调用受保护的函数 - PHP (1)

📅  最后修改于: 2023-12-03 15:18:27.598000             🧑  作者: Mango

PHP中子类如何调用受保护的函数

在PHP中,我们可以通过使用继承来扩展类的功能,从而提高代码的复用性。而在继承中,protected方法与属性是在类及其子类中可见的。但是当我们需要在子类中调用父类的protected方法时,该怎么办呢?

访问控制原则

在学习如何从子类中访问受保护的方法之前,我们需要先理解PHP中的访问控制原则。PHP的访问控制主要包括以下三种访问控制修饰符:

  • public:公共修饰符,公共成员可以在类内外被访问。
  • protected:受保护的修饰符,受保护成员可以在类及其子类中被访问。
  • private:私有修饰符,私有成员仅可以在当前类中被访问。
从子类中访问受保护的方法

当我们需要从子类中访问父类的protected方法时,可以通过以下两种方式实现:

使用parent关键字

在子类中,我们可以使用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。

使用$this关键字

除了使用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关键字也是可行的。

参考文献:

  • PHP中的访问控制:https://www.php.net/manual/zh/language.oop5.visibility.php
  • PHP中使用parent关键字访问父类的方法和属性:https://www.php.net/manual/zh/language.oop5.paamayim-nekudotayim.php#example-223