Nic*_*ick 28 php design-patterns magento
Magento有一个_construct和一个__construct方法有原因吗?为什么附加_construct存在?通过_construct在子类中调用父构造函数来实现额外的方法可以实现任何目的吗?
ben*_*sch 68
我能找到的最佳答案:http://www.magentocommerce.com/boards/viewthread/76027/#t282659
基本上,根级别类(所有其他类继承的类)实现__construct,PHP在构造类时自动调用.现在,这个根级别的类只是调用_construct,它包含实际的代码.
说你有这个设置:
class BaseClass {
function __construct() {
print "In BaseClass constructor\n";
doSomethingReallyImportant();
}
}
class SubClass extends BaseClass {
function __construct() {
print "In SubClass constructor\n";
}
}
$obj = new BaseClass();
//"In BaseClass constructor"
//something really important happens
$obj = new SubClass();
//"In SubClass constructor"
//important thing DOESN'T happen
Run Code Online (Sandbox Code Playgroud)
PHP不会自动调用父类构造函数,因此doSomethingReallyImportant永远不会被调用.您可以要求子类构造函数调用parent::__construct(),但这很容易忘记.所以Magento有子类覆盖_construct:
class BaseClass {
function __construct() {
doSomethingReallyImportant();
_construct();
}
function _construct() {
print "In BaseClass constructor\n";
}
}
class SubClass extends BaseClass {
function _construct() {
print "In SubClass constructor\n";
}
}
$obj = new BaseClass();
//something really important happens
//"In BaseClass constructor"
$obj = new SubClass();
//something really important happens
//"In SubClass constructor"
Run Code Online (Sandbox Code Playgroud)
PHP没有检测到构造函数SubClass,因此它调用了BaseClass构造函数.这使得BaseClass以doSomethingReallyImportant调用子类的重载之前_construct.