Achim: PHP5 Klasse unter Beibehaltung des Namens um 2 Methoden erweit.

Hallo !

ich möchte eine Klasse um 2 Methoden erweitern. Normalerweise würde man eine neue Klasse definieren und die Ursprungsklasse mit "extends" vererben.

Soweit so gut. Ich habe aber folgendes Problem:

Ich möchte eine Joomla 1.5 Komponente erweitern ohne die Originalklasse zu verändern, um Updatefähigkeit zu gewährleisten. Joomla 1.5 basiert auf dem MVC Pattern, d.h. alle Views basieren in diesem Fall auf dem NAMEN der Klasse.

Beispiel class myComponent ergibt -> myComponentView

Wenn ich also die Klasse mit Extend erweitere und einen neuen Namen vergebe, myNewComponent haut es mir alle Views um die Ohren da MyNewComponentView nicht definiert ist.

Wie kriege ich das also hin, ohne die Originaldateien (bzw. Klassen) anzufassen ?

Danke und Gruss
Achim

  1. echo $begrüßung;

    Ich möchte eine Joomla 1.5 Komponente erweitern ohne die Originalklasse zu verändern, um Updatefähigkeit zu gewährleisten. Joomla 1.5 basiert auf dem MVC Pattern, d.h. alle Views basieren in diesem Fall auf dem NAMEN der Klasse.

    Das ist aber nicht dem MVC-Pattern geschuldet.

    Wenn ich also die Klasse mit Extend erweitere und einen neuen Namen vergebe, myNewComponent haut es mir alle Views um die Ohren da MyNewComponentView nicht definiert ist.

    Was hindert dich, es zu definieren?

    Wie kriege ich das also hin, ohne die Originaldateien (bzw. Klassen) anzufassen ?

    Effektiv: Gar nicht.
    Es ginge mit dem Classkit, aber das ist PECL und steht damit vermutlich nicht zur Verfügung.

    echo "$verabschiedung $name";

    1. Hi !

      danke für Deine Info's .. geht nicht (sauber) gibts also doch :) Dann hab ich ja meine Bestätigung.

      Das ist aber nicht dem MVC-Pattern geschuldet.

      richtig, ist einfach eine Joomla Konvention

      »» Wenn ich also die Klasse mit Extend erweitere und einen neuen Namen vergebe, myNewComponent haut es mir alle Views um die Ohren da MyNewComponentView nicht definiert ist.

      Was hindert dich, es zu definieren?

      der Aufwand - kann ich im Prinzip die Anwendung neu schreiben

      »» Wie kriege ich das also hin, ohne die Originaldateien (bzw. Klassen) anzufassen ?

      Effektiv: Gar nicht.

      Schade, aber dachte ich mir schon :(

      Es ginge mit dem Classkit, aber das ist PECL und steht damit vermutlich nicht zur Verfügung.

      Würde gehen .. aber dann bin ich in der Frickelecke.

      Dann muss ich halt den Weg gehen alles zu machen nicht ohne etwas anzufassen, aber zumindest wenig anzufassen.

      Danke nochmals !

      1. echo $begrüßung;

        » » Wenn ich also die Klasse mit Extend erweitere und einen neuen Namen vergebe, myNewComponent haut es mir alle Views um die Ohren da MyNewComponentView nicht definiert ist.
        » Was hindert dich, es zu definieren?
        der Aufwand - kann ich im Prinzip die Anwendung neu schreiben

        Naja,

        class MyNewComponentView extends ComponentView {}

        ist nicht wirklich aufwendig. Oder müsstest du das dann für Dutzende von Klassen machen?

        echo "$verabschiedung $name";

        1. Naja,

          class MyNewComponentView extends ComponentView {}

          ist nicht wirklich aufwendig. Oder müsstest du das dann für Dutzende von Klassen machen?

          Ja, in diesem Fall schon ;)

          Ich habe mich entschlossen die Originalklasse umzubenennen und nenne meine neue Klasse so wie die ursprüngliche. Ist jetzt nicht Nobelpreisverdächtig, aber bisher funktioniert es ganz gut.

          1. Hi Achim,

            Ich habe mich entschlossen die Originalklasse umzubenennen und nenne meine neue Klasse so wie die ursprüngliche. Ist jetzt nicht Nobelpreisverdächtig, aber bisher funktioniert es ganz gut.

            Und für das was du da gerade gemacht hast erstellst du dir jetzt noch ein Patchfile, welches du dann auf neue Versionen der Datei nur noch anwenden brauchst um deine Modifikationen erneut durchzuführen. Mit etwas Glück (soll heißen Joomla hat sich beim Update nicht allzu stark verändert) läuft dein Patch dann ohne irgendwelche weitere Arbeit deinerseits.

            Viele Grüße,
              ~ Dennis.