0

在 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 次(我认为是 3 次),然后将其标记为*recursive*.

但是我们面临这样的情况,什么是最好的重构方式呢?

4

1 回答 1

2

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

间隔

  1. 3.0-devGithub获取 CI
  2. 开放式system/core/loader.phpCI 3.0-dev
  3. 查找public function model函数。
  4. 将其替换为您system/core/loader.php的 CI 2.2.0
  5. 现在你可以像$autoload['model'] = array('first_model' => 'first');

注意:对于那些想要使用别名但具有 CI 的自动加载模型的人来说,这是解决方案2.2.0

于 2014-07-04T04:59:14.597 回答