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

时间:2014-07-03 12:13:56

标签: php codeigniter model reference cyclic-reference

在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*.

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

1 个答案:

答案 0 :(得分:2)

CI 2.2.0不允许带有别名的自动加载模型,但3.0-dev确实支持它。 由于您拥有CI 2.2.0,因此您需要将函数从3.0-dev核心复制到2.2.0核心。

Seps

  1. Github
  2. 获取CI 3.0-dev
  3. 打开CI system/core/loader.php的{​​{1}}。
  4. 查找3.0-dev功能。
  5. 将其替换为public function model CI system/core/loader.php
  6. 现在您可以自动加载2.2.0
  7. 注意:对于那些想要带有别名但具有CI $autoload['model'] = array('first_model' => 'first');

    的自动加载模型的人来说,这是一个解决方案