2012-04-03 89 views
1

對於我的網站,我打算有幾個附加組件。目前我能夠獲得用戶需要的插件,但我不確定如何包含它們。來自不同文件的相同名稱的校準功能

我已經構建了我的目錄,使得插件都在一個名爲plugins的目錄中,然後每個插件位於該目錄下,然後每個插件目錄都有一個我想調用的init.php文件。隨着掃描目錄的構建陣列這樣:

Array ([2] => forums [3] => mesages [4] => profile [5] => clock)

以及相應的目錄陣列成爲:

Array (
[2] => plugins/forums/init.php 
[3] => plugins/mesages/init.php 
[4] => plugins/profile/init.php 
[5] => plugins/something/init.php 
) 

我的問題/問題是我如何調用這些init.php的功能。如果我要通過數組做一個foreach並且以某種方式require()他們,那麼只需從init.php調用一個函數就可以來自任何插件。

我曾考慮過像clock_init()那樣命名的函數,但如果可能,我想避免這種情況。對我的困境有什麼建議嗎?

+1

你爲什麼不只是執行初始化代碼,當你包括初始腳本? – KingCrunch 2012-04-03 17:59:51

回答

0

不幸的是,沒有辦法使用全局函數。

但如果你使用類爲你的插件功能,那麼你可以做這樣的事情:

foreach($plugins as $plugin) { 
    include "$plugin.php"; 
    $klas = new $plugin(); 
    $klas::method(); 
} 

你的插件類:

class forums { 
    function forums() { ... } 
    function method() { ... } 
} 

上面的代碼是未經測試,但它是相當多的理念。

0

Initiall你可以有這個數組合併成一個,使用密鑰作爲包括類型,就像這樣:

$inits = array(
    'forums' => 'plugins/forums/init.php', 
    'messages' => 'plugins/messages/init.php' 
); 

然後,您可以遍歷/無論你需要調用。

if (I WANT TO RUN FORUM INIT) 
{ 
    include $inits['forums']; 
    initFunction(); 
} 

就我個人而言,我將每個這些作爲一個類,並設置一個接口。然後這些將實現一致的方法名稱(在我的界面中聲明),如init()。

http://php.net/manual/en/language.oop5.interfaces.php

相關問題