求教关于$this的问题
php吧
全部回复
仅看楼主
level 10
Phper_瞬歩
楼主
运行该段代码,得出 三 二,这里的$this->ac()为啥没有调用B类新写的方法勒?打破脑袋没想明白...
2012年11月23日 10点11分
1
level 10
Phper_瞬歩
楼主
单机了。。。
2012年11月23日 10点11分
2
level 10
nggtwodezuiai
你的类“A”的“ac”方法定义成“私有”的了,“私有”的方法是不允许重写和继承的,所以会得出“二”
2012年11月23日 10点11分
3
Phper_瞬歩
十分感谢!
2012年11月23日 12点11分
level 10
Phper_瞬歩
楼主
有点表述不清,感觉思维开始打结了,
2012年11月23日 11点11分
5
level 13
Monkey92t
哪里不理解?是不是不明白为什么不是输出4,而是输出2?
2012年11月23日 11点11分
6
Phper_瞬歩
主要是想知道子类继承父类的成员时,是个怎样的机制
2012年11月23日 12点11分
Phper_瞬歩
回复 Phper_瞬歩 :私有成员
2012年11月23日 12点11分
cinkaede
@メ絕対噯上伱
到哪都能看到你- -
2012年11月27日 11点11分
Monkey92t
回复
@cinkaede
:必须的。。。
2012年11月27日 12点11分
level 13
Monkey92t
这里有个继承和重载的问题,这里的重载可和java里的函数重载不同,java里的函数重载,只要参数类型或参数数量不同,即使函数名称相同,它依然是两个不同的函数,而这里,,,继承A类的时候,继承过来了A类的show和ab方法,ac因为是私有方法,不可继承,而B类中,又重写了ab方法,会重载掉继承过来的ab,这也就是第一个会输出3,在ab中又调用了ac方法,因为ac没有继承过来,所以会输出4,在show的方法里面,又调用了ac方法,而ac没有重载,所以他依然是2
2012年11月23日 12点11分
7
Phper_瞬歩
似乎还是没戳中痒处,把A类的show方法如果写在B类中,跟直接继承show方法的区别在哪?子类继承父类是否并不等于子类和父类相加?主要这里的$this在A和B中跳跃,把我搞糊涂了
2012年11月23日 12点11分
Phper_瞬歩
十分感谢
2012年11月23日 12点11分
Monkey92t
this 代表本对象,你理解这一句就可以了,
2012年11月23日 13点11分
level 6
紫慕阳
2012年11月23日 12点11分
8
Phper_瞬歩
绕了半天,终于绕出来了,悲剧
,感谢你们!
2012年11月23日 12点11分
Phper_瞬歩
似乎有点眉目了,总结了下:父类中的方法不能调用子类中的私有成员!
2012年11月23日 12点11分
紫慕阳
回复 Phper_瞬歩 :错了啊,子类中的所有方法都不能被父类调用,要想调用要另外写的,你弄的这个案例是子类方法的覆盖
2012年11月23日 13点11分
Phper_瞬歩
回复 紫慕阳 :我刚才测试了下,public的都可以啊
,楼下图
2012年11月23日 13点11分
level 6
紫慕阳
2012年11月23日 13点11分
10
Phper_瞬歩
改成私有的会报错
2012年11月23日 14点11分
level 10
Phper_瞬歩
楼主
结果:
Fatal error: Call to private method B::ac() from context 'A' in
E:\phpenv\apache\htdocs\php\test.php on line
372
2012年11月23日 14点11分
11
紫慕阳
嗯,确实
2012年11月23日 14点11分
level 8
yequjinxin
子类B的对象调用的show方法是在类A的环境中执行,调用private权限方法要在类A中寻找。
2012年11月25日 06点11分
12
level 11
liruxing1715
这个题目很有意思。
2012年11月26日 07点11分
13
level 7
cinkaede
楼上的都回答了,我就不说了。
这个还好啦,不算太绕,学到递归的时候,可能你会更晕。。。
2012年11月27日 11点11分
14
level 2
宋sjh89
以前我也纠结过这个问题,后来听十八哥讲的课明白了,函数的调用主要看此函数体在具体的哪个类中,
http://www.tudou.com/listplay/uCx6IN6luok/HIFj7u6izTU.html
有时间可以去看看
2012年11月27日 12点11分
15
Phper_瞬歩
2012年11月27日 13点11分
level 2
宋sjh89
下面是我个人的理解:当$b->show()时,因为show()函数体在父类中,所以函数体中调用的函数调用仍就是父类中的ab()与ac();但是因为是子类的对象调用的,public 方法被子类中的方法重定义了,所以是三,private 方法不能重定义,所以为二。
不知道我理解的对不对,见笑了
2012年11月27日 13点11分
16
1