Ankündigung

Einklappen
Keine Ankündigung bisher.

Klasenname einer nicht instanziierten Klasse

Einklappen

Neue Werbung 2019

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

  • Klasenname einer nicht instanziierten Klasse

    Hi,

    das kleine
    PHP-Code:
    $className get_class($this); 
    ist ja kein Kunststück.
    Wie bekommt man den Klassennamen raus, wenn main eine Funktion statisch aufruft? Gibt ja kein Objekt, das ich der Funktion get_class() übergeben könnte.

    Hintergrund:
    DatenObjekte erben von Einer Klasse, die bereits etliche Funktionalitäten zur ferfügung stellt.
    Den einfachen Datensatz zu bekommen ist nicht so die Hürde, weil man eine Statische Variable "$dbTableName = 'tabelle';" in jeder abgeleiteten Klasse haben kann.
    Auf die gleiche Weise könnte ich auch den KlassenNamen noch einmal in eine Variable packen um dann über ein Switch eine zu instanziirende Klasse auswählen kann.
    Das würde jedoch bedeuten, dass ich für jede Neue Klasse auch die Elternklasse wieder anpassen muß.
    => eben die neue Option an den Swich hängen.
    Deshalb such ich nach einer Möglichkeit den Klassennamen zu bekommen, bevor die Klasse instanziiert ist.

    Gruß
    Der Desian
    Wenn dich was ankotzt, machs besser.

  • #2
    Verstehe ich nicht ganz, wenn du die statische Klasse aufrufst, kennst du doch den Namen?

    Kommentar


    • #3
      Re: Klasenname einer nicht instanziierten Klasse

      Zitat von DerDesian
      Deshalb such ich nach einer Möglichkeit den Klassennamen zu bekommen, bevor die Klasse instanziiert ist.
      Das ist sogut wie unmöglich wenn du keinen Anhaltspunkt hast ... wonach entcheidet sich das denn welche Klasse instanziert wird?
      Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

      Kommentar


      • #4
        Hi,

        hab einen Ansatzpunkt. Es ist der jewailige Erbe, von dem ich die geerbte Funktion aufrufen will.

        Ich beschreibs anders
        PHP-Code:
        class Corpus {
            
        #von der wird geerbt
            
            
        function getById($db$id) {
                
        // die Funktion soll hier implementiert werden
                // und so,  dass ich die Funktion nicht bei jedem neuen Erbe anpassen muß
            
        }
        }

        class 
        Truncus extends Corpus {
            
        # is der Erbe
            
            
        function getById($db$id) {
                
        #so ist es bi dato
                
        $query "SELECT * FROM truncus WHERE id=".$id;
                
        $row = ...
                return new 
        Truncus($row);
            }
        }

        class 
        Capites extends Corpus {
            
        # is der Erbe
            
            
        function getById($db$id) {
                
        #so ist es bi dato
                
        $query "SELECT * FROM capites WHERE id=".$id;
                
        $row = ...
                return new 
        Capites($row);

            }

        Ich will einfach eine Reihe von Funktionen abstrahiren
        (zB die getById()), damit ich sie nicht in jeder Datenklasse neu implementieren muß.

        Gruß
        Der Desian
        Wenn dich was ankotzt, machs besser.

        Kommentar


        • #5
          Steht dir PHP5 zur verfügung?

          Dann wären abstrakte Klassen genau das richtige für dich wenn ich dich richtig verstehe.
          Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

          Kommentar


          • #6
            Dann erstelle Dir eine factory.
            Also nicht mehr die Konstruktion über Klassenname::getIrgendwas(1,2), sondern Factory::getIrgendwas('Klassenname', 1, 2) bzw factory->getIrgendwas('Klassenname', 1, 2)

            Kommentar


            • #7
              Das ich so blind duch das Handbuch gestolpert bin... *kopfschüttel*
              So einfach kann es sein:
              PHP-Code:
              class {
                function 
              tuWas() {
                  echo 
              __CLASS__;
                }
              }
              class 
              extends {
              }

              B::tuWas(); 
              Gruß
              Der Desian
              Wenn dich was ankotzt, machs besser.

              Kommentar


              • #8
                PHP-Code:
                <?php
                class {
                  function 
                tuWas() {
                    echo 
                __CLASS__;
                  }
                }
                class 
                extends {
                }

                B::tuWas();
                ?>
                A
                Das ist nicht das, was Du laut Fragestellung haben wolltest.

                Kommentar


                • #9
                  Nicht?
                  Zitat von DerDesian
                  Wie bekommt man den Klassennamen raus, wenn main eine Funktion statisch aufruft?
                  Soweit ich weiß bedeutet
                  'statisch' ~ 'nicht instanziiert'
                  Und ein statischer Aufruf einer Funktion hat normalerweise die Syntax:
                  Klasse::funktion();

                  Ich werde mich bemühen mein Anliegen das nächste mal deutlicher zu formulieren.

                  Gruß
                  Der Desian
                  Wenn dich was ankotzt, machs besser.

                  Kommentar


                  • #10
                    Es passt trotzdem nicht zu Deinem Beitrag Verfasst am: 29.11.2005, 15:17.
                    Auf das Beispiel übertragen, liefert Dir __CLASS__ immer Corpus. Hilft Dir bei Deinem Problem also nicht weiter.
                    Es sei denn, Du implementierst in jeder Klasse die Funktion getById(), die dann Corpus::getById(__CLASS__) aufruft. Aber das wolltest Du ja eigentlich vermeiden.

                    Kommentar

                    Lädt...
                    X