Anzeige:
Ergebnis 1 bis 7 von 7

Thema: Classname aus einer Instanzvariable lesen (Reflection)

  1. #1
    Registrierter Benutzer Avatar von Qudus
    Registriert seit
    14.03.2005
    Beiträge
    101

    Question Classname aus einer Instanzvariable lesen (Reflection)

    hi

    Ich arbeite mit PHP 3.3.8 und 3.4.0. Gibt es da eine Möglichkeit, ähnlich wie bei den Java-Reflections über irgendeine Methode den Classennamen auszulesen, von dem eine Instanzvariable abhängt.

    Ich stelle mir das ungefähr so vor:
    Code:
        class TestClass
        {
        }
        
        $tc =& new TestClass();
        echo classname($tc); // sollte "TestClass" ausgeben
    beste Grüße, Qudus

  2. #2
    Registrierter Benutzer Avatar von ClausVB
    Registriert seit
    05.08.2005
    Ort
    NRW - Deutschland
    Beiträge
    106
    Zitat Zitat von Qudus
    Ich arbeite mit PHP 3.3.8 und 3.4.0.
    PHP3 ist uralt und ich habe nie damit gearbeitet. Aber PHP5 ("Zend Engine 2 only") kann das mit einer zusätzlichen Klasse:
    ReflectionClass
    arbeiten, die dann Konstrukte erlaubt wie:
    PHP-Code:
    $class->isInternal() ? 'internal' 'user-defined',
          
    $class->isAbstract() ? ' abstract' '',
          
    $class->isFinal() ? ' final' '',
          
    $class->isInterface() ? 'interface' 'class',
          
    $class->getName(),
          
    var_export($class->getParentClass(), 1),
          
    $class->getFileName(),
          
    $class->getStartLine(),
          
    $class->getEndline(),
          
    $class->getModifiers(), 
    Vielleicht hilft Dir das ja.

    Gruß
    Claus

  3. #3
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    PHP-Code:
    $cl = new myclass();
    var_dumpget_class_methods$cl ) );
    var_dump$cl ); 
    Ab Version 5.0.1 gibt es die Reflection Klasse.
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  4. #4
    Registrierter Benutzer Avatar von Qudus
    Registriert seit
    14.03.2005
    Beiträge
    101
    Zitat Zitat von ClausVB
    PHP3 ist uralt und ich habe nie damit gearbeitet. Aber PHP5 ("Zend Engine 2 only") kann das mit einer zusätzlichen Klasse:
    Entschuldigung. Das war ein Tippfehler. Ich arbeite mit PHP 4.3.8 und 4.4.0. PHP 3 kann ja noch nicht so richtig viel, wenn ich das so richtig aus der Doku gelesen habe. Da steht ja fast überall "erst ab PHP 4". Aber geaarbeitet habe ich nie mit der 3er oder früher.

    Vardump und print_r kenne ich. Allerdings wird die Ausgabe ja direkt auf stdout gelegt. Das heißt, ich kann die Information nicht im Programm verarbeiten. Und das ist, worauf es mir ankommt.

    Ich entnehme Euren Aussagen, dass es da wohl keine Möglichkeit in PHP 4 gibt. Ist das richtig?

  5. #5
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    var_dump ist ein Beispiel damit du siehst was er ausgibt du kannst also einfach das Array auslesen
    Oder:
    PHP-Code:
    ob_start();
     
    var_dump$meineKlasse );
    $str ob_get_contents();
    ob_end_clean();

    echo 
    "<pre>" $str "</pre>"
    Wenn du unter PHP4 ein Reflection setzen möchstet geht das nur auf die Art:


    PHP-Code:
    define ('DEBUG');
    class 
    meineKlasse {
        function 
    meineMethode {
           if ( 
    defined'DEBUG' ) )
              print( 
    __CLASS__ __FUNCTION__ ); // oder __METHOD__
        
    }

    oder
    PHP-Code:
    define ('DEBUG');
    class 
    meineKlasse {
        var 
    $EXTEND "MeineKLASSE";
        function 
    meineMethode {
           if ( 
    defined'DEBUG' ) )
              
    $this->EXTEND .=  __FUNCTION__ ;
        }
    }

    $cl = new meineKlasse;
    echo 
    $cl->EXTEND
    Geändert von undefined (22-10-2005 um 13:13 Uhr)
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  6. #6
    Registrierter Benutzer
    Registriert seit
    25.12.2004
    Beiträge
    217
    Hallo Qudus,

    schau dir auch mal debug_backtrace() , könnte dir auch weiterhelfen.

    Gruß,

    nEox

  7. #7
    Registrierter Benutzer Avatar von Qudus
    Registriert seit
    14.03.2005
    Beiträge
    101

    Smile Jungs, ich danke Euch!

    Diese Variablen sind genau das, was ich die ganze Zeit gesucht habe (auch in anderem Zusammenhang). Und debug_backtrace kann ich bestimmt auch noch mal gebrauchen.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •