PHP类与对象中的private访问控制的疑问

网络编程 2025-03-13 00:33www.168986.cn编程入门

在手册中的疑惑:关于PHP类继承与方法的调用

在浏览手册时,遇到了一个令人费解的问题,特地记录下来,分享给遇到类似情况的朋友们。

考虑以下PHP代码:

```php

class Bar {

public function test() {

$this->testPrivate();

$this->testPublic();

}

public function testPublic() {

echo "Bar::testPublic";

}

private function testPrivate() {

echo "Bar::testPrivate";

}

}

class Foo extends Bar {

public function testPublic() {

echo "Foo::testPublic";

}

private function testPrivate() {

echo "Foo::testPrivate";

}

}

$myFoo = new Foo();

$myFoo->test();

// 输出:Bar::testPrivate // Foo::testPublic

```

为何第一行会输出"Bar::testPrivate"呢?当我们创建Foo类的实例并调用其test方法时,按照常规理解,应该首先调用Foo类的testPrivate方法,而不是Bar类的testPrivate方法。事实并非如此。在PHP中,当一个对象调用一个方法时,首先会在该类中查找该方法。如果找不到,则会在其父类中进行查找。这就是所谓的“方法顺序”。在这个例子中,由于Foo类没有定义testPrivate方法,所以PHP会在Bar类中查找,并调用Bar类的testPrivate方法。输出为"Bar::testPrivate"。接着,它会调用Foo类的testPublic方法,输出"Foo::testPublic"。至于“cambrian.render('body')”,似乎是与该问题无关的代码片段或可能是特定环境下的代码。

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by