PHP支持OOP编程,这大家都知道。但是PHP的继承和JAVA还是有点区别的。比较致命的一点就是:如果子类(ExtendsB)显示实现构造方法,那么在实例化ExtendsB的时候,系统并不会主动调用父类(ExtendsA)的构造方法

如果必须调用父类构造方法有2种方法:

1、子类(ExtendsB)中不实现构造方法(及时子类不要空实现构造方法)

2、自己手动调用父类构造方法(parent::__construct();)

直接上例子吧。

<?php
class ExtendsA {
    protected $c;

    public function ExtendsA(){
        $this->c = 10;
    }
}

class ExtendsB extends ExtendsA{
    //public function b(){} //这行解注释 就不会打印东西出来。因为ExtendsA构造没有被执行
    public function print_data(){
        echo $this->c;
    }
}

$b = new ExtendsB();
$b->print_data();

而JAVA代码就不是这样的。无论是否实现构造方法,再实例化子类的时候,系统都会递归调用父类构造方法。

public class ExtendsTestMain {

    public static void main(String args[]) {
        ExtendsTestB b = new ExtendsTestB();
        b.printData();
    }
}

class ExtendsTestA {

    protected int c;

    public ExtendsTestA() {
        c = 10;
    }
}

class ExtendsTestB extends ExtendsTestA {

    public ExtendsTestB() {

    }

    public void printData() {
        System.out.println(c);
    }
}