在PHP Constructors and Destructors documentation声明
注意:如果子类,则不会隐式调用父构造函数 定义构造函数。为了运行父构造函数,调用
是子构造函数中的parent :: __ construct()
但是,如果子类没有调用构造函数,那么父构造函数是否仍会被调用?或者我们应该创建一个调用父构造函数的构造函数吗?
IE:
class BaseClass {
function __construct() {
print "In BaseClass constructor\n";
}
}
class SubClass extends BaseClass {
function __construct() {
parent::__construct();
}
}
答案 0 :(得分:16)
也许这有点显而易见,但有些环顾四周,对这个问题的直接回答令人惊讶地发现并不容易,所以这里是:
如果子类 NOT 定义构造函数,则将调用父构造函数。
在下面的示例中,$ obj仍然会从BaseClass调用构造函数,因为SubClass从不调用构造函数。
class BaseClass {
function __construct() {
print "In BaseClass constructor\n";
}
}
class SubClass extends BaseClass {
//I do not have a constructor :(
}
$obj = new SubClass();
答案 1 :(得分:6)
考虑构造函数是一种可以像任何其他方法一样被覆盖的方法。如果父类具有构造函数,则其所有子类都将继承该构造函数。如果子项覆盖构造函数,则在创建新对象时将使用此项,并且不会隐式调用父项的构造函数。如果子项不重写构造函数,则将使用父项的构造函数。这个概念适用于多重继承。