Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从自动加载库访问自动加载的模型_Php_Codeigniter - Fatal编程技术网

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我在问题中解释得更好,对不起,谢谢