gpt4 book ai didi

php - 子类访问父类的私有(private)方法?

转载 作者:可可西里 更新时间:2023-11-01 01:14:38 24 4
gpt4 key购买 nike

一位用户在 PHP Visibility manual page 上发表了评论.这是投票第二多的评论。他使用了这个代码示例:

<?php
abstract class base {
public function inherited() {
$this->overridden();
}
private function overridden() {
echo 'base';
}
}

class child extends base {
private function overridden() {
echo 'child';
}
}

$test = new child();
$test->inherited();
?>

输出将是“base”。

据我了解:“子”类继承了 inherited() 方法。不继承 overridden() 方法,因为它是私有(private)的,而是定义了自己的方法。但是当 test 对象(子类的实例)运行 inherited() 方法时,它输出“base”。

所以我的问题是:

  1. 为什么 child 会运行一个它无权访问的方法?
  2. 为什么它不运行自己重新定义的方法?

最佳答案

因为在子类中您没有定义任何function inherited(),所以它必须调用其父类的方法。正如您引用的评论所说:

... private methods are visible only for the class that defines them and the child class does not see the parent's private methods. ...

也就是说,由于您没有任何公共(public)方法来引用 child 的私有(private)方法,例如:

class child extends base {
public function inherited() {
$this->overriden();
}

// ...

在我看来,调用 $test->inherited() 会使用其父类的范围,因此,如果您创建父类的实例并调用 会发生什么$this->inherited()。它会输出 base

尝试做我上面说的:在子类中,复制并粘贴父类的继承方法。它将输出child

我不确定这是否解释得很好,如果是,也许它可以帮助您了解更多,如果不是,有人可以帮助我改进它。

关于php - 子类访问父类的私有(private)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42441054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com