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

  • DerDesian
    hat ein Thema erstellt Klasenname einer nicht instanziierten Klasse.

    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

  • Gast-Avatar
    Ein Gast antwortete
    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.

    Einen Kommentar schreiben:


  • DerDesian
    antwortet
    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

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    PHP-Code:
    <?php
    class {
      function 
    tuWas() {
        echo 
    __CLASS__;
      }
    }
    class 
    extends {
    }

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

    Einen Kommentar schreiben:


  • DerDesian
    antwortet
    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

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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)

    Einen Kommentar schreiben:


  • HStev
    antwortet
    Steht dir PHP5 zur verfügung?

    Dann wären abstrakte Klassen genau das richtige für dich wenn ich dich richtig verstehe.

    Einen Kommentar schreiben:


  • DerDesian
    antwortet
    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

    Einen Kommentar schreiben:


  • HStev
    antwortet
    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?

    Einen Kommentar schreiben:


  • Zergling-new
    antwortet
    Verstehe ich nicht ganz, wenn du die statische Klasse aufrufst, kennst du doch den Namen?

    Einen Kommentar schreiben:

Lädt...
X