Mehrfachvererbung?

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

  • Mehrfachvererbung?

    Hi zusammen,

    Folgendes Problem:

    Ich suche nach einer Möglichkeit, mehrere Klassen in einer anderen Klassen zu "vererben" bwz. nutzen, ohne diese als Referenz zu übergeben.

    Sprich - bei folgender Situation:
    PHP-Code:
    class ui // Implementiert das Userinterface
    }

    class 
    db // ist die DB-Wrapper
    }

    class 
    formValidation // validiert Formulareingaben
    }

    $ui = new ui;
    $db = new db;
    $formValidation = new formValidation
    Innerhalb der Instanz $ui soll nun sowohl die Instanzen $db als auch $formValidation nutzen können. Dabei ist aber weder $db von $formValidation, noch $formValidation von $db abhängig. Folglich ist rein logisch nichts mit "extends".

    Wie regelt man sowas PHP-OOP kompatibel?


    Danke vorab,
    Gruß

    Tobi

    PS: Meine Edits dienten zur Klarstellung, "Klasse" wurde zu "Instanz"
    Zuletzt geändert von webdepp; 18.04.2009, 07:39.

  • #2
    Die DB könnte man in eine globale Registry legen. Bei der Formularvalidierung weiß ich nicht so recht ... zur Not übergib die Instanz an $ui. Was macht ui eigentlich?

    Kommentar


    • #3
      Original geschrieben von onemorenerd Was macht ui eigentlich?
      Bislang setzt und stellt ui aktuelle "ToDo"-Variablen zur Verfügung ($ui->do='saveForm'), lädt die entsprechende Formularmaske und erstellt "Drumherum" ( wie z.B. letzer, vorheriger, nächster, letzter Eintrag in der Liste für das aktuelle Modul).

      Hab noch ein wenig rumgelesen und aktuell würde ich als besten Weg (ungetestet)

      PHP-Code:
      $ui = new ui;
      $db = new db;

      $ui->db =&$_GLOBALS['db']; 
      oder sowas implementieren.

      Das Ampersand sieht für meinen Geschmack aber hässlich aus. Zumindest wäre so jedoch übermäßiger Speicherverbrauch durch mehrfache Instanzierung verhindert - oder? Ist so eine Lösung "schicklich"?

      Bessere Lösung?
      Zuletzt geändert von webdepp; 18.04.2009, 09:28.

      Kommentar


      • #4
        $_GLOBALS heißt eigentlich $GLOBALS und ich rate dringend davon ab, etwas mit ähnlichem Namen neu zu erfinden (was dann auch gar nicht superglobal wäre)!
        Davon abgesehen sollte man $GLOBALS gar nicht verwenden. Es bricht jeden Scope und du hast keine Kontrolle darüber.
        Mit Registry meinte ich sowas:

        PHP-Code:
        $db = new db();
        Registry::set('db'$db);

        class 
        ui {
            private 
        $db;
            public function 
        __construct() {
                
        $ui->db Registry::get('db');
            }

        Kommentar


        • #5
          Das ist doch ein ganz klarer Fall für Dependency Injection.

          Kommentar


          • #6
            In diesem Zusammenhang sehr lesenswert sind die letzten Artikel von Fabian Potencier. http://fabien.potencier.org/article/...s-and-closures als Einstiegspunkt.

            Kommentar

            Lädt...
            X