Name der erweiterten (statischen) Klasse aus Basisklasse auslesen

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

  • Name der erweiterten (statischen) Klasse aus Basisklasse auslesen

    Hallo,

    ich brüte hier nun schon wieder ewig über einem kleinen Problem, und zwar geht es wie im Titel angedeutet darum, den Namen einer statischen Klasse in einer Methode der Basisklasse auszulesen. Bei dynamischen Klassen ist das kein Problem, da kann man get_class einfach mit $this füttern, nur für statische Klassen finde ich einfach keine vernünftige Lösung. Zum besseren Verständniß, so sieht's ungefähr aus:

    PHP-Code:
    class B
    {
        public static function 
    ClassName()
        {
        }
    }
    class 
    extends B
    {
        public static function 
    SomeMethodThatCouldSomethingFunny()
        {
        }

    __CLASS__ würde in der Funktion von Klasse B immer nur B ausgeben, und nun weiß ich nicht wirklich weiter. Klasse A soll aufjedenfall aus dem Spiel gehalten werden, denn gerade sowas soll ja durch die Basisklasse überflüssig gemacht werden.

    Hätte da irgendjemand einen Tip für mich wie ich an den Klassennamen kommen könnte?

    Gruß
    Olli

  • #2
    Die ReflectionClass Klasse erlaubt es, Klassen zurückzuentwickeln
    public ReflectionClass getParentClass()
    aus: http://www.php.net/manual/de/languag...reflection.php
    Wir werden alle sterben

    Kommentar


    • #3
      Ich glaube du hast mich ein wenig misverstanden, ich benötige nicht den Namen der Elternklasse, sondern den der erweiternden Klasse, und da komme ich mit Reflection leider auch nicht weit, also zumindest konnte ich nichts passendes unter den Methoden der ReflectionClass Klasse finden.

      Bin noch auf einen Tip mit debug_backtrace gestoßen, aber ab PHP5 funktioniert das wohl nicht mehr, da ist dann auch nur noch die Basisklasse drin.

      Gruß
      Olli

      Kommentar


      • #4
        Stimmt, habe dich wirklich falsch verstanden....

        Dann wirst du, wohl oder übel, public static function ClassName() in deiner Class A überschreiben müssen...
        Wir werden alle sterben

        Kommentar


        • #5
          Hi,

          soll das ne art factory werden ? Sieht mir jedenfalls ganz danach aus.

          Auch wenns nicht schön ist, aber evtl. könnte dir eval() helfen.
          Aber sag mal erstmal ganz genau was du vorhast.


          greets
          (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

          Kommentar


          • #6
            Nene, keine Factory, letztendlich soll es nur dafür sorgen das alle Klassen im Framework über eine einheitliche Methode verfügen die den Klassennamen in einem einheitlichen Format zurückgibt, und da bietet sich die Basisklasse halt an.

            Gruß
            Olli

            Kommentar


            • #7
              Hi,

              Das ist alles ?

              warum dann eine statische methode ? Um die aufzurufen braucht man doch den
              klassennamen. Also weiss man ihn in dem moment auch.

              Du musst das ganze nur als methode der basisklasse bauen.
              Ich kann es gerade nicht testen aber folgendes sollte funktionieren.

              PHP-Code:
              class Parent{
                     public function 
              class_name(){
                             
              $cls = new ReflectionClass($this);
                             return 
              $cls->getName();
                     }
              }

              class 
              Child extends Parent{

              }


              $the_class = new Child();
              echo 
              $the_class->class_name(); 
              Evtl. kann man sogar direkt von ReflectionClass erben, dann hat
              man noch gleich ein paar mehr methoden um etwas heraus zu bekommen.

              greets
              (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

              Kommentar


              • #8
                Nein, alles ist das nicht, ich habe einfach nur das mal als Beispiel genommen. In der Basisklasse sind noch weitere Funktionen vorhanden die auf den Namen der erweiternden Klasse angewiesen sind, z.B. zum auslesen der Eigenschaften und Methoden, usw.. Sicher könnte man auch get_class_vars(name) Schreiben, aber auch solche Kleinigkeiten soll das Framework überflüssig machen.

                Und dann geht es halt auch noch um das Format, da soll hinterher niemand mehr selbst Hand anlegen müssen.

                Es ist zwar nicht lebenswichtig, aber ich würd's halt schön finden

                Gruß
                Olli
                Zuletzt geändert von s02; 14.09.2006, 20:55.

                Kommentar


                • #9
                  In der Basisklasse sind noch weitere Funktionen vorhanden die auf den Namen der erweiternden Klasse angewiesen sind
                  Wo hast du denn OOP gelernt?
                  Ich würde dieses mal als Designfehler bezeichnen!
                  Wir werden alle sterben

                  Kommentar


                  • #10
                    Nun übertreib das doch nicht so Es ist doch nicht so das die "Hauptaufgaben" der Klasse ausgelagert würden und auf den Namen angewiesen wären, es geht einfach darum diese kleinen, nennen wir sie mal "Helper", die für alle Klassen gleich sein sollen nicht immer wieder neu definieren zu müssen wenn es denn nicht wirklich nötig/gewollt ist, und manche arbeiten nunmal mit dem Klassennamen der erweiternden Klasse...

                    Gruß
                    Olli
                    Zuletzt geändert von s02; 14.09.2006, 21:43.

                    Kommentar

                    Lädt...
                    X