class p {
function p() {
print "Parent's constructor\n";
}
function p_test() {
print "p_test()\n";
$this->c_test();
}
}class c extends p {
function c() {
print "Child's constructor\n";
parent::p();
}
function c_test() {
print "c_test()\n";
}
}$obj = new c;
$obj->p_test();
请教一下大家这段代码
function p_test() {
print "p_test()\n";
$this->c_test();
}
中的 $this->c_test();
这个是什么写法
function p() {
print "Parent's constructor\n";
}
function p_test() {
print "p_test()\n";
$this->c_test();
}
}class c extends p {
function c() {
print "Child's constructor\n";
parent::p();
}
function c_test() {
print "c_test()\n";
}
}$obj = new c;
$obj->p_test();
请教一下大家这段代码
function p_test() {
print "p_test()\n";
$this->c_test();
}
中的 $this->c_test();
这个是什么写法
$this->c_test() 就是调用 该类的 c_test() 方法详情见手册上有关面向对象的说明
$obj = new c;执行p_test();方法。$this->c_test() 执行当前类的 c_test()方法……
按照C++里的语法,子类方法相对于父类是不可见的。
但php里继承可能相当于直接将父类方法、属性复制。
若使用
$obj = new p;
$obj->p_test();
将会报错。
你的这个写法很巧妙
我大致解释一下吧,因为你实例化的是子类c,所以你的这个输出过程是不报错的,实例化c后,在函数p_test()中的$this->c_test()中的$this指的是你实例化的c,而c中有这个函数,所以是成功的
而如果你是实例化的p,再执行的话,你就会发现报错了,从而又说明了刚开始我的说法,父类是无法调用子类的!希望您能理解!