2012-04-03 13 views
1

私のサイトでは、私はいくつかのアドオンを持つつもりです。現時点では、ユーザーが必要とするプラグインを入手することができますが、そのプラグインを含める方法がわかりません。異なるファイルから同じ名前のCal関数

プラグインがすべてpluginsというディレクトリにあり、各プラグインがそのディレクトリの下にあるディレクトリに構造化されていて、各プラグインディレクトリにはinit.phpというファイルがあります。

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

となってきて対応するディレクトリの配列:次のようなスキャンDIRのビルドアレイと

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

答えて

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()のような一貫したメソッド名(私のインタフェースで宣言されている)を実装します。 initスクリプトが含まれている場合、あなただけに、init-コードを実行していないのはなぜ

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