La clase ReflectionFunction te permite funciones
de ingenierà inversa.
<?php class ReflectionFunction implements Reflector { final private __clone() public object __construct(string name) public string __toString() public static string export() public string getName() public bool isInternal() public bool isUserDefined() public string getFileName() public int getStartLine() public int getEndLine() public string getDocComment() public array getStaticVariables() public mixed invoke(mixed* args) public mixed invokeArgs(array args) public bool returnsReference() public ReflectionParameter[] getParameters() public int getNumberOfParameters() public int getNumberOfRequiredParameters() } ?>
<?php /** * A simple counter * * @return int */ function counter() { static $c = 0; return $c++; }
// Create an instance of the Reflection_Function class $func = new ReflectionFunction('counter');
// Print out basic information printf( "===> The %s function '%s'\n". " declared in %s\n". " lines %d to %d\n", $func->isInternal() ? 'internal' : 'user-defined', $func->getName(), $func->getFileName(), $func->getStartLine(), $func->getEndline() );
<?php class ReflectionParameter implements Reflector { final private __clone() public object __construct(string name) public string __toString() public static string export() public string getName() public bool isPassedByReference() public ReflectionClass getClass() public bool allowsNull() public bool isOptional() public bool isDefaultValueAvailable() public mixed getDefaultValue() } ?>
Nota: getDefaultValue(),
isDefaultValueAvailable(),
isOptional() fueron agregados en PHP 5.1.0.
La clase ReflectionClass te permite hacer
ingenierÃa inversa de clases.
<?php class ReflectionClass implements Reflector { final private __clone() public object __construct(string name) public string __toString() public static string export() public string getName() public bool isInternal() public bool isUserDefined() public bool isInstantiable() public bool hasConstant(string name) public bool hasProperty(string name) public bool hasMethod(string name) public string getFileName() public int getStartLine() public int getEndLine() public string getDocComment() public ReflectionMethod getConstructor() public ReflectionMethod getMethod(string name) public ReflectionMethod[] getMethods() public ReflectionProperty getProperty(string name) public ReflectionProperty[] getProperties() public array getConstants() public mixed getConstant(string name) public ReflectionClass[] getInterfaces() public bool isInterface() public bool isAbstract() public bool isFinal() public int getModifiers() public bool isInstance(stdclass object) public stdclass newInstance(mixed* args) public ReflectionClass getParentClass() public bool isSubclassOf(ReflectionClass class) public array getStaticProperties() public array getDefaultProperties() public bool isIterateable() public bool implementsInterface(string name) public ReflectionExtension getExtension() public string getExtensionName() } ?>
Nota: hasConstant(), hasMethod(),
hasProperty() fueron agregados en PHP 5.1.0.
<?php class ReflectionMethod extends ReflectionFunction { public __construct(mixed class, string name) public string __toString() public static string export() public mixed invoke(stdclass object, mixed* args) public moxed invokeArgs(stdclass object, array args) public bool isFinal() public bool isAbstract() public bool isPublic() public bool isPrivate() public bool isProtected() public bool isStatic() public bool isConstructor() public bool isDestructor() public int getModifiers() public ReflectionClass getDeclaringClass()
// Inherited from ReflectionFunction final private __clone() public string getName() public bool isInternal() public bool isUserDefined() public string getFileName() public int getStartLine() public int getEndLine() public string getDocComment() public array getStaticVariables() public bool returnsReference() public ReflectionParameter[] getParameters() public int getNumberOfParameters() public int getNumberOfRequiredParameters() } ?>
La clase ReflectionProperty te permite
hacer ingenierÃa inversa a las propiedades de la clase.
<?php class ReflectionProperty implements Reflector { final private __clone() public __construct(mixed class, string name) public string __toString() public static string export() public string getName() public bool isPublic() public bool isPrivate() public bool isProtected() public bool isStatic() public bool isDefault() public int getModifiers() public mixed getValue(stdclass object) public void setValue(stdclass object, mixed value) public ReflectionClass getDeclaringClass() } ?>
La clase ReflectionExtension te permite hacer
ingenierÃa inversa a extensiones. Puede obtener todas las
extensiones cargadas en tiempo de ejecución usando
get_loaded_extensions().
<?php class ReflectionExtension implements Reflector { final private __clone() public __construct(string name) public string __toString() public static string export() public string getName() public string getVersion() public ReflectionFunction[] getFunctions() public array getConstants() public array getINIEntries() public ReflectionClass[] getClasses() public array getClassNames() } ?>
<?php /** * My Reflection_Method class */ class My_Reflection_Method extends ReflectionMethod { public $visibility = '';
public function __construct($o, $m) { parent::__construct($o, $m); $this->visibility= Reflection::getModifierNames($this->getModifiers()); } }
/** * Demo class #1 * */ class T { protected function x() {} }
/** * Demo class #2 * */ class U extends T { function x() {} }
// Print out information var_dump(new My_Reflection_Method('U', 'x')); ?>
Nota:
Precaución: Si se desea sobreescribir el constructor, recuerde
llamar el constructor padre _antes_ que cualquier otro código
que se inserte. El no hacerlo asà resultará en:
Fatal error: Internal error: Failed to retrieve the reflection object
Atención técnica y comercial: (54)-11-5031-1111 las 24 hs. los 365 días del año. ToWebs, (c) 2008
Virtucom Networks S.A Av. Belgrano 1586, piso 10 (C1093AAQ) Cap. Fed. Bs. As, Argentina.