php/codeigniter中的循环引用类加载


circular reference class loading in php/codeigniter

在CodeIgniter中我有一个名为User_Model的模型和另一个名为Product_Model的模型

现在在User_Model构造函数中,我正在加载我在类中使用的几个模型。

class User_Model extends CI_Model
{
  public function __construct()
  {
    parent::construct();
    $this->load-model("Product_Model");
    //load some more models I need...
  } 
}

在开发产品时,我有时需要使用用户模型,所以我这样做:

class Product_Model extends CI_Model
{
  public function __construct()
  {
    parent::construct();
    $this->load-model("User_Model");
    //load some more models I need...
  } 
}

问题是,因为这些是在循环参考,我得到Fatal error: Maximum function nesting level of '100' reached。我使用xdebug,我知道它有设置来删除这个。我的问题是,在不增加设置限制的情况下,正确的处理方法是什么?我应该如何重构架构?

我知道,如果我使用PHP没有codeigniter,并创建循环引用(类A加载类B,类B加载类A), PHP将加载它N次(我认为是三次),然后将其标记为*recursive*.

但是我们面对这样的情况,重构的最佳方式是什么?

2.2.0不允许使用别名自动加载模型,但3.0-dev支持。因为你有2.2.0,你需要从3.0-dev核心复制一个函数到你的2.2.0核心。

Seps :

    从Github上获取3.0-dev
  1. 打开3.0-devsystem/core/loader.php .
  2. 查找public function model函数。
  3. 将其替换为2.2.0system/core/loader.php
  4. 现在你可以自动加载$autoload['model'] = array('first_model' => 'first');

:这是解决方案,为那些谁想要自动加载模型与别名,但有CI 2.2.0