Klasse erneut deklarieren

S

spex

Hi,

zur Zeit bastel ich an einem IRC-Bot, der auch wunderbar funktioniert.

Das Pluginsystem soll auf Objekten basieren.
Nun hab ich aber das Problem das ich bei einem Rehash auch alle Plugins neu einlesen muss/möchte, damit Codeänderungen übernommen werden, und ich in diesem Fall auch alle Klassen dieser Plugins neu deklarieren müsste.

Nun dabei kommt selbstverständlich folgende Fehlermeldung:
Code:
Fatal error: Cannot redeclare class XXXXXX
Kann man das irgenwie umgehen und bereits Deklarierte Objekte löschen um sie dann erneut einzulesen?

Gruß
 
Naja, da die Klasse an sich sich ja nicht verändern wird, könntest du entweder die einzubindenden Dateien per [phpf]require_once[/phpf] einlesen, oder die Klassen in ein if-Statement einbinden, also so:
PHP:
if(!class_exists("Foo"))
{
    class Foo
    {
        // Class Foo
    }
}
 
Wobei es ja auch überhaupt keinen Sinn macht, eine Klasse neu zu deklarieren, wenn es sich um die gleiche Klasse handelt. Ansonsten solltest du dir Gedanken über dein Naming machen …
 
Wobei es ja auch überhaupt keinen Sinn macht, eine Klasse neu zu deklarieren, wenn es sich um die gleiche Klasse handelt. Ansonsten solltest du dir Gedanken über dein Naming machen …

Ich denke er spricht von einem IRC Bot, der sozusagen in einer Dauerschleife läuft. Wenn es dort jetzt Aktualisierungen der Plugins gibt (der Klassen) sollen diese aktualisiert werden, ohne den Betrieb abzubrechen, sprich die Klassen neu parsen. Das kann PHP meines Erachtens nach aber nicht.
 
Ich denke er spricht von einem IRC Bot, der sozusagen in einer Dauerschleife läuft. Wenn es dort jetzt Aktualisierungen der Plugins gibt (der Klassen) sollen diese aktualisiert werden, ohne den Betrieb abzubrechen, sprich die Klassen neu parsen. Das kann PHP meines Erachtens nach aber nicht.

Genau so ist es.

Wenn das nicht möglich ist muss ich mir eine andere Möglichkeit suchen.
Wär zu schön gewesen.
 
Ein bisschen Googeln brachte mir die PECL-Extension runkit, mit der das neu laden einer Klasse während der Ausführung des Skriptes scheinbar möglich ist.
 
Zurück