gpt4 book ai didi

PHP:理解 $this - 调用基类方法而不是子方法

转载 作者:行者123 更新时间:2023-12-04 10:22:41 29 4
gpt4 key购买 nike

阅读 PHP.net 文档时,我偶然发现了一个扭曲了我理解 $this 的方式的问题:

class C {
public function speak_child() {
//echo get_class($this);//D
echo $this->f();//calls method of C class... why?!
}

private function f() {
echo "C";
}
}

class D extends C {
public function speak_parent() {
echo $this->f();
}
public function f() {
echo "D";
}
}

$d= new D();
$d->speak_parent();
$d->speak_child();

由于 $this 是 D 类实例的表示,我希望输出:
DD

但是,实际输出是:
DC

为什么 $this->f() 宁愿访问基类方法,而不是子类方法?
当我们将 C->f 更改为 public 时,情况会发生变化。

最佳答案

因为函数f C类是私有(private)的,不能被子类覆盖,子类看不到。所以当你声明一个函数时f在子类中,它是一个新功能,不是从父类扩展的。

您还可以扩展功能f如果您将其声明为 protected在父类中。

转码到官方文档here

Members declared as private may only be accessed by the class that defines the member.

关于PHP:理解 $this - 调用基类方法而不是子方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60773506/

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