php的继承代码,PHP类继承的一段代码

这段代码解释了PHP中子类如何调用父类的private方法,尽管看起来是子类的引用,但实际调用的是父类的私有方法,这是因为public方法在运行时动态绑定,而private方法在编译时静态绑定。理解这一点有助于掌握面向对象编程的原理。
摘要由CSDN通过智能技术生成

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

来自php手册的一段代码,请问最后的输出结果是如何得到的?

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

回复内容:

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

来自php手册的一段代码,请问最后的输出结果是如何得到的?

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

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

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

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

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

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

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

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

因为你调用的是$myFoo的test的方法,这个方法是继承来的,this指向的是$myFoo实例自己。

所以调用的是Foo的testPublic方法。

不过不明白为什么testPrivate调用的是父类的

相关标签:php

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值