【发布时间】:2014-07-03 12:13:56
【问题描述】:
在 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*.
但是我们面临这样的情况,重构的最佳方式是什么?
【问题讨论】:
-
为什么不自动加载两个模型,你似乎需要它们?
-
任一模型实际上是否需要另一个模型的实例,还是只需要该类中的一些值 - 在这种情况下,将值传递给构造函数或方法
-
@jtheman - 自动加载的问题是它们在所有地方都使用别名,而 CI 自动加载似乎不允许加载具有别名的模型:-(
-
@UndefinedVariable 你有什么版本的 CI ?是
2.2.0还是3.0 dev -
@user574632 - 两个模型都使用另一个模型的方法。对于 User 类中的每个,我都执行
$this->product->getProductList();- 这将获得该用户的产品列表。我可以在技术上通过用户来获取我猜的产品列表......但还有其他一些更复杂的例子
标签: php codeigniter model reference cyclic-reference