2011-05-31 230 views
5

我希望能够在CodeIgniter的控制器中使用OOP并创建新对象。所以我需要使用自动加载功能:如何将自动加载函数添加到CodeIgniter中?

function __autoload($classname) 
{ 
    require_once("../records/$classname.php"); 
} 

但是我怎样才能将它添加到CodeIgniter?

+0

您应该链接到您的其他问题,以更好地espress您的需求;) – 2011-05-31 14:17:14

回答

9

您可以将您的自动加载器添加到app/config/config.php。我在这个位置使用过类似的autoload函数,它的工作非常整齐。

function __autoload($class) 
{ 
    if (strpos($class, 'CI_') !== 0) 
    { 
     @include_once(APPPATH . 'core/' . $class . EXT); 
    } 
} 

Courtesy of Phil Sturgeon。这种方式可能更便携。 core可能会为你records;但无论如何检查你的路径是否正确。这种方法还可以防止与装载CI_库(意外)

+0

谢谢,这个作品很棒! – Jonas 2011-05-31 15:29:07

+0

这适用于PHP 5.4,但在PHP 5.5中触发错误。有人知道解决方法吗? – tabacitu 2015-04-29 11:45:11

+0

@tabacitu我使用5.6。7,并没有问题,使用像[phpab](https://github.com/theseer/Autoload)来生成你的班级地图,然后包括它 – Alex 2015-08-23 03:27:26

0

用户指南,了解有关Auto-loading Resources是它漂亮的夹板。

要自动加载资源,请打开application/config/autoload.php文件,并将要加载的项目添加到自动加载数组中。您会在该文件中找到与每种类型的项目对应的说明。

+0

我现在尝试这样做,创建一个文件'loader.php'和自动加载它作为“配置”文件。但它看起来像函数是在负载执行,所以我得到这个错误信息:'消息:require_once(../记录/ CI_Exceptions.php):未能打开流:没有这样的文件或directory'有什么建议? – Jonas 2011-05-31 14:18:00

+0

可能是你需要使你的自动加载功能更多“inteligent”例如更换'_'为'/',使路径绝对所以这将使CI_Exceptions.php - > CI/Exceptions.php – 2011-05-31 16:56:54

+0

即自动加载部分不自动 - 加载。它由Codeigniter预加载类。 OP想要的是在尝试实例化它们时自动加载类,这就是接受的答案。 – 2011-10-30 01:26:30

-2

我建议以这个功能添加到您的代码中使用挂钩的任何干扰。

在你的配置使钩/ config.php文件

 
$config['enable_hooks'] = TRUE; 


在你的application/config/hooks.php对 “pre_system” 的号召,这发生在核心/ CodeIgniter.php添加新的挂钩在整个系统运行之前。

 
$hook['pre_system'] = array(
    0 => array(   
     'function' => 'load_initial_functions', 
     'filename' => 'your_hooks.php', 
     'filepath' => 'hooks' 
    ) 
); 

然后在钩文件夹中创建两个文件:

第一:应用/钩/ your_functions.php,把你的__autoload功能,您希望可以在这个点的所有其他职能。

二:应用/钩/ your_hooks.php,并把这个代码:

 
function load_initial_functions() 
{ 
    require_once(APPPATH.'hooks/your_functions.php'); 
} 

这将使所有的在你的代码中使用your_functions.php到处定义你的函数。