Php 从自动加载库访问自动加载的模型
在我的自动加载文件中,我有几个常用库和几个常用模型自动加载:Php 从自动加载库访问自动加载的模型,php,codeigniter,Php,Codeigniter,在我的自动加载文件中,我有几个常用库和几个常用模型自动加载: $autoload['libraries'] = array('database','session','tools','common'....); $autoload['model'] = array('mauth','madmin',...); 我在调用另一个库的库中调用此代码: class library1{ function x(){ $this->CI =& get_instance();
$autoload['libraries'] = array('database','session','tools','common'....);
$autoload['model'] = array('mauth','madmin',...);
我在调用另一个库的库中调用此代码:
class library1{
function x(){
$this->CI =& get_instance();
$this->CI->library2->y();
}
}
class library2()
function y(){
$this->CI =& get_instance();
$array_notifications = $this->CI->madmin->getNotifications();
}
}
我得到:
Message: Undefined property: Splash::$madmin
我想我可以这样做:
$this->CI->load->model('madmin');
但是。。为什么?为什么我不能决定自动加载类的加载优先级
谢谢
编辑:澄清AFAIK没有选择加载优先级的可能性,而且我认为仅仅为了避免写一行而对内核进行黑客攻击有点……错误 我不得不去搜索核心系统,以便更好地了解它的工作原理。看起来库是在模型之前自动加载的,所以您说在调用模型的方法之前需要加载模型是正确的(虽然我没有测试,但我认为它是这样工作的) 我不知道为什么要这样做,但到目前为止,我看到的唯一解决方案是更改加载顺序,但我警告您:我认为如果事情以这种方式运行,CI开发人员会考虑一个原因;这可能会有你说不出来的缺点,所以如果你发现问题,一定要做好准备。 这个解决方案只是有点推测性,不能保证,我将感谢您的反馈,因为我现在无法建立一个测试环境来证明它 转到
system/core/loader.php
文件,第1166行附近(方法是\u ci\u autoloader()
),其中检查了$autoload
数组的“libraries”索引,并将其位置与第1183行附近的“model”索引检查交换
祝你好运:)我个人认为你应该尽可能避免自动加载,因为正如前面所说的,无论你使用与否,所有资源都将保持加载状态 另外,请注意,模型自动加载的工作方式与其他对象的自动加载有所不同
使用模型时,CI假定任何加载的库在模型中也可用。因此,在模型之前加载库实际上是正确的做法。你说的“我有共同点”是什么意思?@DamienPirsy我在问题中解释得更好,对不起,谢谢