gpt4 book ai didi

PHP 手册 OOP 可见性示例 - 有人可以解释一下吗

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

我在 PHP OOP 手册中看到了这个 http://www.php.net/manual/en/language.oop5.visibility.php我无法理解为什么输出不是: Foo::testPrivate Foo::testPublic

class Bar 
{
public function test() {
$this->testPrivate();
$this->testPublic();
}

public function testPublic() {
echo "Bar::testPublic\n";
}

private function testPrivate() {
echo "Bar::testPrivate\n";
}
}

class Foo extends Bar
{
public function testPublic() {
echo "Foo::testPublic\n";
}

private function testPrivate() {
echo "Foo::testPrivate\n";
}
}

$myFoo = new foo();
$myFoo->test(); // Bar::testPrivate
// Foo::testPublic

最佳答案

一切都与变量/方法的可见性有关。

您会注意到在 Bar 类中,方法 testPrivate()private。这意味着只有它自己可以访问该方法。没有 child 。

所以当 Foo 扩展 Bar,然后要求运行 test() 方法时,它做了两件事:

  1. 它覆盖了 testPublic() 方法,因为它是公开的,并且 Foo 有权用它自己的版本覆盖它。
  2. 它调用 test() on Bar(因为 test() 只存在于 Bar 上()).

testPrivate() 被覆盖,并且是包含 test() 的类的一部分。因此,打印了 Bar::testPrivate
testPublic() 覆盖,并且是继承类的一部分。因此,打印了 Foo::testPublic

关于PHP 手册 OOP 可见性示例 - 有人可以解释一下吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9433766/

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