<?php
class a extends b {
public function init() {
echo "init.a";
}
}
class b {
public function __construct (){
echo "string";
}
function test() {
echo "aa";
$this->init();
}
public function init() {
echo "init.b";
}
}
$aa = new a();
$aa->test();
为何不执行b.init(),难道 this 访问的时候B 不是对象?
1
ob 2015-05-29 14:48:51 +08:00
哈哈,我来猜测一下:
a继承自b,那么b的所有方法都会被a继承,包括test(),所以当$aa->test()的时候,$this其实还是a自己的。 |
2
hiboshi OP 了解了 忘记 被覆盖了
|
3
cevincheung 2015-05-29 14:50:00 +08:00
a继承b。a的init覆盖(重写)了b的init。所以调用a的init就只是调用a的init。
百度:php parent ps: 敢不敢好好处理一下缩进,看的蛋疼 |
6
Paranoid 2015-05-29 15:02:20 +08:00
$aa = new a(); 返回对象是A, $aa->test(); 调用 A 的test() , 有该方法? 没有, 父类有,调用,父类中方法中的 $this->init(); $this 是对象A. 对象A 有 init() 方法? 有调用 。
|
7
anyforever 2015-05-29 15:04:47 +08:00
@cevincheung +1
楼主还得好好学一下基础啊。 |
8
hiboshi OP @anyforever 短路了
|
9
anyforever 2015-05-29 15:10:17 +08:00
@hiboshi 呃、哈哈。外面抽一根儿回来就满血了。
|