Einer Klasse dynamisch weitere MTehoden hinzufügen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Einer Klasse dynamisch weitere MTehoden hinzufügen

    Hallo Leute!

    Ich habe eine Klasse, die ich bei jedem Seitenaufruf instantiere und deren Methoden ich auch bei jedem Seitenaufruf benutze. Unter gewissen Bedingungen ist es allerdings notwendig, dass ich weitere Methoden aufrufen muss.
    Anstatt alle Methoden in eine Klasse zu schreiben, von der ich beim regulären Seitenaufruf aber nur einen Bruchteil auch verwende, hatte ich nun vor, alle anderen Methoden von der Haupt-Klasse abzusondern, und in eine separate Datei zu legen, die ich dann include, wenn ich die darin befindlichen Methoden brauche.
    Weil man aber nicht einfach so einer Klasse weitere Methoden hinzufügen kann (ich bin jedenfalls auf keine Möglichkeit gestoßen), habe ich mir folgende Lösung ausgedacht:
    Alle Methoden, die ich dazuladen möchte, schreibe ich in eine andere Klasse. Diese Klasse instantiere ich zur Laufzeit innerhalb einer der Methoden in der Haupt-Klasse. Dort übergebe ich $this als Parameter-Referenz an die Methoden der gesonderten Klasse, um darüber auf die Eigenschaften der Haupt-Klasse zugreifen zu können.
    Alles klar noch?

    Hier ein Beispiel:
    PHP-Code:
    class xyz
    {
        var 
    $xyz_aaa 0;
        var 
    $xyz_bbb 0;
        var 
    $xyz_ccc 0;

        function 
    xyz()
        {
            
    $abc = new abc;

            
    $abc->aaa($this);
            
    $abc->bbb($this);
            
    $abc->ccc($this);
        }
    }

    class 
    abc
    {
        function 
    aaa(&$xyz)
        {
            
    $xyz->xyz_aaa 111;
        }
        function 
    bbb(&$xyz)
        {
            
    $xyz->xyz_bbb 222;
        }
        function 
    ccc(&$xyz)
        {
            
    $xyz->xyz_ccc 333;
        }
    }

    $obj = new xyz;

    var_export($obj); 
    Diese Lösung funktioniert auch. Meine Frage lautet aber nur noch:
    Kann man das Problem besser lösen?
    arrays sind klasse

  • #2
    PHP-Code:
    class myClass1 {

    }


    class 
    myClass2 extends myClass1 {


    Du kannst in myClass2 die selben Methoden ( function xyz () {} ) definieren, wie in myClass1. Die überschreiben dann die vorherigen. Oder du kannst auch neue hinzufügen.

    Du musst dich halt nur vorher festlegen, welche Teile die Basis darstellen und welche Teile nur als Erweiterung gelten

    -> http://de.php.net/extends
    Zuletzt geändert von EEBKiller; 25.11.2005, 20:23.

    Kommentar


    • #3
      http://de2.php.net/manual/en/language.oop5.patterns.php wäre auch noch ein Weg.

      Kommentar


      • #4
        Das Arbeiten mit einer erweiterten Klasse mit Hilfe von Extends ließe sich nur recht schlecht realisieren, da ich in der Ausführung einer Methode aus der Haupt-Klasse entscheide, ob noch die Einbindung der weiteren Methoden notwendig ist. Ich kann nicht von vorne herein sagen, ob ich nur eine oder beide Klassen brauche.

        Die Lösung mit patterns anzugehen würde klappen, ... wenn ich PHP5 hätte
        Daher bleibe ich wohl bei meiner Lösung, wenn denn nichts dagegen spricht !?

        arrays sind klasse

        Kommentar


        • #5
          Original geschrieben von Maranello-550
          Das Arbeiten mit einer erweiterten Klasse mit Hilfe von Extends ließe sich nur recht schlecht realisieren, da ich in der Ausführung einer Methode aus der Haupt-Klasse entscheide, ob noch die Einbindung der weiteren Methoden notwendig ist. Ich kann nicht von vorne herein sagen, ob ich nur eine oder beide Klassen brauche.
          Wieso ist das schwierig ?

          PHP-Code:
          class myClass1 

          // Some more code

              
          function checkClass2Load() {
                   if (
          $condition1 == "true" && $condition2 == "true") {
                        return 
          true;
                   }
              return 
          false;
              }
          }

          class 
          myClass2 extends myClass1 


          PHP-Code:
          $class = new myClass1();
          if (
          $class->checkClass2Load()) {
              
          $class = new myClass2();

          Das sollte normalerweise funktionieren, denke ich mal. Und ich glaub, dass es sogar aus einer Methode heraus funktioniert, wenn du statt $class dann $GLOBALS['class'] verwendest

          Kommentar


          • #6
            Na eben das Überschreiben ist ein Problem. Erst erstele ich in der ersten Klasse die benötigten Eigenschaften, lese aus denen die Bedingung heraus, um sie anschließend, wenn die Bedingung erfüllt ist, wieder zu löschen, obwohl es gerade diese Eigenschaften sind, die ich durch die weiteren MEthoden der zweiten Klasse bearbeiten möchte.
            arrays sind klasse

            Kommentar

            Lädt...
            X