Dynamisch Objekt-Instanzen erzeugen <- geht das ?

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

  • Dynamisch Objekt-Instanzen erzeugen <- geht das ?

    Moin,

    also, ich habe in fast allen meiner Models eine Methode getTable(), die das zughörige Datenbank-Model instanziert. Das sieht wie folgt aus:

    PHP-Code:
    public function getTable()
        {
            if (
    null === $this->_table) {
                require_once 
    APPLICATION_PATH '/models/DbTable/Partner.php';
                
    $this->_table = new Model_DbTable_Partner;
            }
            return 
    $this->_table;
        } 
    aus dem Model "Partner".

    Nun möchte ich in dieser Zeile:

    PHP-Code:
    $this->_table = new Model_DbTable_Partner
    Irgendwie das "Partner" dynamisch machen. Dann könnte ich eine Basis-Modelklasse benutzen, von der alle anderen Erben und dann mit getTable('Tabellenname') einfach das DbModel holen ohne in jedem Model wieder die getModel()-Methode reinschreiben zu müssen.

    Probiert hatte ich das wie bei den Variablen-Namen mit den geschweiften Klammern, aber irgendwie hat das zu nichts geführt.

    Hat da jemand nen heißen Tip ?

    Gruß,
    nohfreak
    Mein aktuelles Projekt: Hausaufgaben Datenbank für kostenlose Hausaufgaben

  • #2
    Du hast ja lustige Probleme...
    PHP-Code:
    $klasse 'Model_DbTable_'.'Partner' 
    $this->_table = new $klasse
    Und mit Verwendung des SPL Autoloaders könntest du dir die ganzen eingestreuten require einsparen/zentralisieren
    Wir werden alle sterben

    Kommentar


    • #3
      PHP-Code:
      $class='Model_DbTable_'.get_class($this);
      $this->_table = new $class(); 
      So geht's auf jeden Fall. Da gibt es sicher auch eine Syntax mit geschweiften Klammern, so ist es aber wenigstens noch übersichtlich.

      Kommentar


      • #4
        Sowohl aus Gründen der Übersicht/Nachvollziehbarkeit, als auch aus Gründen der Performance ist diese Umsetzung nicht geeignet.
        Hier trotzdem ein Beispiel wie du das machen könntest:
        PHP-Code:
        <?php
        class dummy{
         function 
        helloworld(){
          echo 
        "Hello world!";
         }
        }

        $a "dum";
        $b "my";
        $c $a.$b;
        $d = new $c;
        $d->helloworld();
        ?>

        Kommentar


        • #5
          Ah, wunderbar, ich werds gleich mal testen, danke.

          Wieso is dasn lustiges Problem ? Mein Informatik-Prof sagt dauernd Code-Verdopplung "ih bah". Da dachte ich mir, naja, irgendwie hatter Recht, das muss auch schlauer gehen. ^^
          Mein aktuelles Projekt: Hausaufgaben Datenbank für kostenlose Hausaufgaben

          Kommentar


          • #6
            Original geschrieben von jmc
            Sowohl aus Gründen der Übersicht/Nachvollziehbarkeit, als auch aus Gründen der Performance ist diese Umsetzung nicht geeignet.
            Warum, was bringt das denn für einen Performance-Nachteil mit sich ?
            Mein aktuelles Projekt: Hausaufgaben Datenbank für kostenlose Hausaufgaben

            Kommentar


            • #7
              Original geschrieben von nohfreak
              Mein Informatik-Prof sagt dauernd Code-Verdopplung "ih bah". Da dachte ich mir, naja, irgendwie hatter Recht, das muss auch schlauer gehen. ^^
              Das Konzept, das PHP "variable Variablen" nennt, sind nicht schlauer; sondern der kleine Bruder von eval.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Gut, er sagt das immer im Zusammenhang mit JAVA, da hab ich noch keine variablen Variablen entdeckt. Und variable Variablen brauch ich ja garnicht, nur variable Objekt-Instanzierungen.
                Mein aktuelles Projekt: Hausaufgaben Datenbank für kostenlose Hausaufgaben

                Kommentar


                • #9
                  Original geschrieben von nohfreak
                  Und variable Variablen brauch ich ja garnicht, nur variable Objekt-Instanzierungen.
                  Das, was bei den Vorschlaegen, die hier gemacht wurden, zur Anwendung kommt, ist exakt das gleiche Prinzip.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    Sehe ich nicht so. Ein new $class() in PHP entspricht vom Sinn dem Class.forName(class).newInstance() in Java. Das soll natürlich nicht bedeuten, dass variable Variablen oder eval im Alltag verwendet werden sollte, bis halt auf diese speziellen Ausnahmen.

                    Kommentar


                    • #11
                      Man möge an das "Factory Design Pattern"(und seine Brüder) denken, welches ja auch im wesentlichen das gleiche tut. Nur schöner verpackt.
                      Zuletzt geändert von combie; 06.02.2009, 19:47.
                      Wir werden alle sterben

                      Kommentar


                      • #12
                        Original geschrieben von combie
                        Nur schöner verpackt.
                        Eben.
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar

                        Lädt...
                        X