php单继承有什么问题,php继承相关的一个问题

原因是这样的,你B继承了A,test这个方法你继承下来了,但是test本身是在A类里面的,也就是说,你继承了test,但是test依旧是属于A的,那么此时test里的$this指的就是A这个对象。

如果你想要在B里调用B自己的foo的话,你可以这么做:

class B extends A {

public function foo() {

echo 'b';

}

public function test() {

parent::test(); // 调用父类的test方法,父类里的test方法调用父类自身的foo方法

$this->foo(); // 掉用自己的foo方法

}

}

整体来说的话,就是不要把继承当成属于.

另外就是官方说的是正确的,你这里并不是继承问题,而是应该弄清楚属于与不属于问题。

根据你的回复,就这个我继续做一下回答:

看一下你本身的这个例子

class A {

private function foo() {

echo 'a';

}

public function test() {

$this->foo();

}

}

class B extends A {

public function foo() {

echo 'b';

}

}

在这种情况下,如果你把A中的foo方法改成了public,那么此时foo就被继承了,而在B类里的foo方法相当于是重写了A类的foo方法,但是此时A类中的foo并没有消失,但是需要在B类中以parent::foo()这种形式来访问父类方法。这种情况方便理解,可说A中的foo方法被隐藏了。

既然被重写了,那么自然就会调用foo就是调用重写后的foo了,可以理解为既然有新的东西,那么就肯定用新东西了,新的自然优先嘛。

然后回头看为什么A中原本为private,虽然B继承了一个公共方法还是访问A类中的foo呢?首先我们看一下前提概要,也就是A类中的foo是private的,B类不可继承,那么此时就相当于有两个foo,一个是private的,一个是public的,嗯,这里要区分private与"隐藏"是不同的概念。

那么此时其实就相当于是,虽然B继承了A,但是A会首先到自己里面找,那么此时foo没有被重写,也就是没有被覆盖,那么肯定是调用自己的了。对于A来说,B你继承了我,但是我自己有,我就不要你的东西了,还是自己老婆好啊。

嗯。。。我试着用几句更简单的话来描述看看是否可行:

A: 我是A?

B: 我是B,我继承你了啊,我继承了你的test,我有foo

A:嗯,我也有foo,我不给你用

B:我被调用了啊,用的是继承了你的test

A:嗯,我看看,哦,调用了foo啊,我有

B:能用我的foo吗?

A:不能

B:好吧。。。?

再来看把A中的private变为public后:

A:我是A

B:我是B,我继承了你的test,也继承了你的foo,然而我把你的foo重写了

A:我艹你大爷?,那你用parent::foo()调用我给你的foo了么?

B:。。。没有,我现在是大爷?

A:好吧。。。

B:我被调用了啊,用的是继承了你的test

A:好吧...卧槽,foo被你重写了啊,那用你的foo

B:那是当然啊,要是还要用你的,我会用parent::foo()调用的

A:行吧,艹你大爷?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值