2011-05-31 65 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到處定義你的函數。