Klassenobjekte/Methoden und Funktionen per Laufzeit ändern/modifizieren

xtramen01

Erfahrenes Mitglied
Hallo,

ich möchte ein bestehenden System, indem bereits alle notwendigen Klassen und Funktionen, eingebunden sind, um "eine Art" Plugin System erweitern.

Ich habe mir das prinzipiell so vorgestellt, das es ein Plugin Ordner gibt mit den jeweiligen Plugin Dateien. Das einbinden dieser, stellt kein Problem dar.

Problematisch wird es nur, wenn ich mit einem Plugin versuche, eine bereits vorhandene Klasse zu modifizieren. Selbiges gilt für Funktionen. Modifizieren deshalb, weil ich vermeiden möchte, das man die Klasse für ein Plugin komplett neu schreiben muss.

Hat hier jemand eine Idee oder einen Ansatz wie ich das realisieren könnte?

Vielen Dank und Gruß
 
Es müsste möglich sein, eine Methode einer Klasse zu verändern. Wenn nicht verändern, dann sollte es irgendiwe möglich sein die Methode zu überschreiben oder so. Zumindestens alle die öffentlich sind.

Gruß
 
Methoden von Klassen kann man eigentlich nicht überschreiben, also nicht ohne PHP-Erweiterung. Die einzige normale Möglichkeit ist, dass du eine Klasse erstellst, die von dieser Klasse erbt, und du in dieser neuen Klasse Methoden erstellst, die die gleichen Namen haben wie einige aus der Elternklasse.
 
Hmm ok.
Der Effekt wäre ja im Prinzip dann der selbe.
Wußte nicht das es so auch geht. Hast Du ein kleines Beispiel wie das aussieht?
Ich möchte einfach verhindern, das man alle Klassenaufrufe in sämtlichen Scripts ändern muss. Das würde ja dem Prinzip eines solchen "Pluginsystems" widersprechen.

Gruss
 
Mh, du willst also standardisierte Methodennamen haben? Dafür hingegen sind Schnittstellen (interfaces) gedacht.
 
So kann man das machen:
PHP:
class Foobar
{
    public function foo()
    {
        echo 'Foo<br />';
    }

    public function bar()
    {
        echo 'Bar<br />';
    }
}

class One extends Foobar
{
    public function bar()
    {
        echo 'One<br />';
    }
}

class Two extends Foobar
{
    public function bar()
    {
        echo 'Two<br />';
    }
}

$objFoobar = new Foobar();
$objFoobar->foo();
$objFoobar->bar();

$objOne = new One();
$objOne->foo();
$objOne->bar();

$objTwo = new Two();
$objTwo->foo();
$objTwo->bar();

Gruß
 
Danke für den Vorschlag.
Aber $objFoobar->foo() sollte auch weiterhin genauso aufgerufen werden.
Sonst muss ich ja dennoch alle Aufrufe in sämtlichen Scripten ändern in
 
Mh, dann musst du das eben ändern, so dass es so aussieht:
PHP:
class Foobar {
  public function foo() {
    echo 'Foo<br />';
  }
 
  public function bar() {
    echo 'Bar<br />';
  }
}
 
class One extends Foobar {
  public function bar() {
    parent::bar();
    echo 'One<br />';
  }
}
 
class Two extends Foobar {
  public function bar() {
    parent::bar();
    echo 'Two<br />';
  }
}
 
$objFoobar = new Foobar();
$objFoobar->foo();
$objFoobar->bar();
 
$objOne = new One();
$objOne->foo();
$objOne->bar();
 
$objTwo = new Two();
$objTwo->foo();
$objTwo->bar();
 
Irgendwie verstehen wir uns nicht richtig :)
Angenommen ich habe insgesamt 100 Zugriffe auf die Klasse "Foobar" mit dem Aufruf "$objFoobar->foo();" und ich möchte mithilfe des Plugins erreichen das anstatt "Foo<br />", "One<br />" ausgegeben wird. Dann müsste ich ja weiterhin alle Zugriff umschreiben zu $objOne->foo();

Ich suche aber nach einer Möglichkeit, ohne das ich sämtliche Aufrufe neu schreiben muss.
Geht das nicht?

Gruss und dank euch echt für die Unterstützung!
 
Zurück