2012-04-03 5 views
1

Für meine Website beabsichtige ich mehrere Add-Ons. Im Moment bin ich in der Lage zu bekommen, welche Plugins der Benutzer benötigt, aber ich bin unsicher, wie man sie einbinden kann.Cal-Funktionen desselben Namens aus verschiedenen Dateien

Ich habe meine Verzeichnisse so strukturiert, dass die Plugins alle in einem Verzeichnis namens plugins sind, und dann jedes Plugin in einem Verzeichnis darunter ist, und dann hat jedes Plugins-Verzeichnis eine init.php Datei, die ich aufrufen möchte. Mit dem Build-Array des gescannten dir als solche:

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

und die entsprechenden Verzeichnisse Array immer:

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

Mein Problem/Frage ist, wie nenn ich diese init.php ‚s-Funktionen. I wenn ich eine foreach durch das Array und irgendwie require() sie tun würde, dann könnte einfach von einer der Plugins eine Funktion von init.php aufrufen.

Ich habe überlegt, die Funktionen wie clock_init() benannt zu haben, aber ich möchte das wenn möglich vermeiden. Irgendwelche Vorschläge für meine missliche Lage?

+1

Warum nicht Sie führen Sie einfach den init-Code, wenn Sie den init-Skript enthalten? – KingCrunch

Antwort

0

Leider gibt es keine Möglichkeit, globale Funktionen zu verwenden.

Obwohl, wenn Sie Klassen für Ihre Plugin-Funktionen verwenden, dann können Sie etwas tun:

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

Ihre Plugin-Klasse:

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

Der obige Code ist nicht getestet, aber es ist so ziemlich das Idee.

0

Initiall Sie dieses Array zu einem zusammengefasst haben könnte, mit dem Schlüssel wie die Art umfassen, etwa so:

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

Sie könnten dann iterieren/Anruf je nachdem, was Sie benötigen.

Persönlich hätte ich jede von diesen als eine Klasse und eine Schnittstelle einrichten. Diese implementieren dann einen konsistenten Methodennamen (in meiner Schnittstelle deklariert) wie init().

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

Verwandte Themen