在CodeIgniter中,是否可以加载库&模型如下:
$my_library = new my_library();
我想这样做的原因是因为我使用的编辑器(Komodo Edit)在使用$this->load
时无法识别用于自动完成的类。
答案 0 :(得分:4)
在某些情况下,可以加载类似的类,但是你应该坚持使用CodeIgniter加载器类,除非绝对必要不这样做。我建议您将库和模型转换为与CodeIgniter加载器类兼容。
当您说自动填充功能不起作用时,我理解您的意思。我使用NetBeans,这也是我遇到的问题。我做了一点挖掘,尽管对Komodo Edit的记录要少得多,但是使自动完成正常工作的解决方案非常类似于使用NetBeans。
首先,这是一个Komodo Edit bug report,记录您遇到的问题。它自2008年开放以来,因为有一个简单的解决方法,它很可能不会直接进入应用程序。
这是blog post detailing the workaround。我们的想法是在项目的根目录中创建一个虚拟PHP文件,其中包含许多引用核心CodeIgniter类的属性和方法的注释。然后,Komodo Edit将引用该文件,并将属性和方法添加到代码完成中。
博客文章看起来有些过时,但您应该能够轻松修改它以使其适用于您正在使用的任何版本的CodeIgniter。
如果你很好奇,这里是blog post detailing the same solution for Netbeans。
答案 1 :(得分:2)
这是我尝试使用名称空间(5.3+)和spl_autoload_register()
的模型的新方法。要让它也适用于图书馆也不会太难:
<?php
class MY_Loader extends CI_Loader {
protected static $CI;
public function __construct()
{
parent::__construct();
self::$CI =& get_instance();
}
public static function autoload($class_name)
{
if (substr($class_name, 0, 7) == 'Models\\')
{
self::$CI->load->model(substr($class_name, 7));
}
}
public function singleton($model_name)
{
if ( !class_exists('Models\\'.$model_name) || empty(self::$CI->$model_name))
{
$this->model($model_name);
}
return self::$CI->$model_name;
}
public function factory($model_name, $params = NULL)
{
if ( !class_exists('Models\\'.$model_name))
{
$this->model($model_name);
}
if (count($params) < 2)
{
return new self::$CI->$model_name($params);
}
else
{
$reflection_class = new ReflectionClass('Models\\'.$model_name);
return $reflection_class->newInstanceArgs($params);
}
}
}
spl_autoload_register('MY_Loader::autoload');
命名空间的原因:
<强>用途:强>
new ClassName()
简单地实例化对象(您的IDE应该选择它)$this->load->singleton($class_name)
加载单例 - 我仍需要对此部分进行一些操作,因为如果您自动加载第一个实例,它实际上不会是单例,然后使用{{1 }} 之后。此功能与$this->load->singleton()
基本相同,但更具自我描述性。 $this->load->model()
加载工厂实例。这很好,因为你可以链接方法调用,并根据给定的参数在构造函数中加载一些奇特的数据库。答案 2 :(得分:0)
我认为调用这样的库不会起作用。您可以尝试使用php include / require函数手动在页面中包含该类,理论上这将允许您以这种方式创建实例。
原谅我,但我不明白你的意思是你的编辑没有认识到它。
答案 3 :(得分:0)
您是否尝试将库目录添加到项目属性中? 我认为这可以帮助http://community.activestate.com/node/7590(由于我不使用komodo,我不太确定)