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();
这个是什么写法

解决方案 »

  1.   

    $this是指这个类的对象,它并不是一个实际存在的对象。
    $this->c_test() 就是调用 该类的 c_test() 方法详情见手册上有关面向对象的说明
      

  2.   

    c 类 继承重写 p 类。实例化c类。
    $obj = new c;执行p_test();方法。$this->c_test() 执行当前类的 c_test()方法……
      

  3.   

    你class p 里没有c_test的哇
      

  4.   

    这个确实是一种奇怪的写法。
    按照C++里的语法,子类方法相对于父类是不可见的。
    但php里继承可能相当于直接将父类方法、属性复制。
    若使用
    $obj = new p;
    $obj->p_test();
    将会报错。
      

  5.   

    可能是php是运行时解释吧,尽管p类中没有定义c_test()。
      

  6.   

    我测试了,8楼的说法是错误的,父类是根本无法调用子类的
    你的这个写法很巧妙
    我大致解释一下吧,因为你实例化的是子类c,所以你的这个输出过程是不报错的,实例化c后,在函数p_test()中的$this->c_test()中的$this指的是你实例化的c,而c中有这个函数,所以是成功的
    而如果你是实例化的p,再执行的话,你就会发现报错了,从而又说明了刚开始我的说法,父类是无法调用子类的!希望您能理解!