为什么Magento有_construct和__construct的方法?

2022-08-30 15:31:25

Magento有一个和一个方法有什么原因吗?为什么存在附加项?仅仅通过调用子类中的父构造函数就无法实现额外方法所实现的任何成就吗?_construct__construct_construct_construct


答案 1

我能找到的最好的答案是:http://www.magentocommerce.com/boards/viewthread/76027/#t282659

基本上,根级类(所有其他类都从中继承)实现 ,每当构造类时,PHP都会自动调用它。现在,这个根级类只是调用 ,其中包含实际代码。__construct_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

PHP 不会自动调用父类构造函数,因此永远不会被调用。您可能需要子类构造函数调用 ,但这很容易忘记。所以Magento有子类覆盖:doSomethingReallyImportantparent::__construct()_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"

PHP 在 中检测不到构造函数,所以它调用 的构造函数。这允许在调用子类的 overrided .SubClassBaseClassBaseClassdoSomethingReallyImportant_construct


答案 2

对Marco来说:在Magento中覆盖这样的方法是错误的。原因是 - 所有类都从中继承它,并且它有以下代码:__construct()Varien_Object

#File: lib/Varien/Object.php 
public function __construct() 
{     
      //...snip...             
      $args = func_get_args();     
      if (empty($args[0])) 
      {         
          $args[0] = array();     
      }     
      //...snip... 
} 
//... 

使用代码__construct,这些参数不会传递。你真的必须使用Benesch的代码:

class SubClass extends BaseClass {
   function _construct() {
       print "In SubClass constructor\n";
   }
}

Alan Storm 的 Magento Block Lifecycle Methods 中阅读更多相关信息


推荐