文章归档友情连接

PHP的静态绑定和动态绑定(private/public)

分类:PHP编程  作者:rming  时间:2014-07-26

PHP的静态绑定和动态绑定(private/public)

子类Foo的对象调用了test()方法,test()方法调用了$this->testPrivate();这个$this此时应该是子类的引用,按理说应该调用子类的testPrivate()方法,实际上却调用了父类的testPrivate()方法

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

这是PHP的动态绑定和静态绑定的一种情况。

public是动态绑定,在编译期不绑定,所以在运行期调用父类的test()方法的时候,会解析为子类的public方法。

而private是私有的,不会继承到子类,在编译期就绑定了,是一种“静态”的绑定(类似5.3后的self)。

与这个相关的是LSB,静态延迟绑定,PHP5.3因为有了这个特性之后,使PHP的OOP得到加强

public: 可以被继承,也可以被外部调用。

private: 不可以被继承,也不可以被外部调用。

protected: 可以被继承,但不能被外部调用。



提交评论