Probleme Modul System mit php OPP?

PostmanX

Mitglied
Hallo,

ich hab mir eine kleine classe zugebaut die für mich was prüfen soll. Ich will das modular aufbauen. Ich dachte mir das das so gehen würde:

PHP:
..
 public    function getapi($api, $data) {
        $pluginName        =    preg_replace('/[^a-zA-Z0-9-]/','_',$api);
        if(file_exists($this->pluginPath.$pluginName.'.php')) {
            include $this->pluginPath.$pluginName.'.php';
        } else {
            include $this->pluginPath.'default.php';
        }
        return modulFunc($data);
        
        
    }
..
Das Problem. Ich difiniere in einer Funktion eine Funktion. Ich kann dadurch die Funktion nicht als richige Funktion benutzen. Ich wollte auch ungern, nur einen stumpfen code includen.

Habt ihr vielleicht eine Idee wie man so was besser umsetzt?
 
Ich difiniere in einer Funktion eine Funktion. Ich kann dadurch die Funktion nicht als richige Funktion benutzen.

Du definierst nichts, du includest erst einmal nur. Ich sehe worauf du hinaus willst. Ich kann dir nur zwei Tipps geben:

1. include die Dateien am Anfang der Datei.
2. Packe die Funktion modulFunc in verschiedene Klassen mit jeweils dem Namen eines Moduls also beispielsweise so:

PHP:
class default // << schlechter Name "default" ist ein reserviertes Schlüsselwort
{
    public function modulFunc($data)
    {
    }
}

class sowieso
{
    public  function modulFunc($data)
    {
    }
}

Dann instanziierst du innerhalb deiner If-Abfrage ein Objekt der gewünschten Klasse. Dieses Objekt kannst du dann allgemeingültig verwenden. Der Code könnte so aussehen:

PHP:
$module = null;
if(class_exists($pluginName)) {
  $module = new $pluginName();
} else {
  $module = new DefaultModule(); 
}

$module->modulFunc($data);
 
Danke für deine Schnelle hilfe. Den weg bin ich so halb gegangen. Der Nachteil dabei ist, dass man erstmal alle Plugin Includen muss. Ich hab das jetzt so gemacht, dass ich eine Classe include dadruch immer die gleiche classe mit der gleichen methode starte.
 
Mach der das schon bei class_exists das wusste ich gar nicht. Kenne zwar diese Funktion war mir aber nicht beweust. Ein Rpoble wäre da noch. Was mache ich wenn ich wenn $pluginName mit einer Zahl beginnt? Ich könnte das theoretisch umwandeln, oder gibt es da vllt ne möglichkeit eine zahl als aim classennamen am anfang zu haben?
 
War mir klar, hätte aber dennoch sein können das man da was machen kann. Dann muss die die Zahlen am anfang umwandeln lassen.

Danke für deine Hilfe!
 
Zurück