Archiv verlassen und diese Seite im Standarddesign anzeigen : 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:
class TestClass
{
}
$tc =& new TestClass();
echo classname($tc); // sollte "TestClass" ausgeben
beste Grüße, 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 (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.
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;
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
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.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.