PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Classname aus einer Instanzvariable lesen (Reflection)



Qudus
21-10-2005, 14:25
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:


class TestClass
{
}

$tc =& new TestClass();
echo classname($tc); // sollte "TestClass" ausgeben


beste Grüße, Qudus

ClausVB
21-10-2005, 17:24
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 (http://sitten-polizei.de/php/reflection_api/docs/language.reflection.class.reflection_class.html)
arbeiten, die dann Konstrukte erlaubt wie:

$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

undefined
21-10-2005, 18:27
$cl = new myclass();
var_dump( get_class_methods( $cl ) );
var_dump( $cl );

Ab Version 5.0.1 gibt es die Reflection Klasse.

Qudus
21-10-2005, 22:06
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?

undefined
22-10-2005, 13:04
var_dump ist ein Beispiel damit du siehst was er ausgibt du kannst also einfach das Array auslesen ;)
Oder:


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:




define ('DEBUG', 1 );
class meineKlasse {
function meineMethode {
if ( defined( 'DEBUG' ) )
print( __CLASS__ . __FUNCTION__ ); // oder __METHOD__
}
}

oder


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

$cl = new meineKlasse;
echo $cl->EXTEND;

nEox
22-10-2005, 14:02
Hallo Qudus,

schau dir auch mal debug_backtrace() (http://de3.php.net/manual/de/function.debug-backtrace.php) , könnte dir auch weiterhelfen.

Gruß,

nEox

Qudus
23-10-2005, 14:29
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.