CakeFest 2024: The Official CakePHP Conference

Clase ReflectionObject

(PHP 5, PHP 7, PHP 8)

Introducción

La clase ReflectionObject reporta información sobre un object.

Sinopsis de la Clase

class ReflectionObject extends ReflectionClass implements Reflector {
/* Constantaes heredadas constants */
/* Propiedades */
public $name;
/* Métodos */
public __construct(object $argument)
public static export(string $argument, bool $return = ?): string
/* Métodos heredados */
public static ReflectionClass::export(mixed $argument, bool $return = false): string
public ReflectionClass::getAttributes(?string $name = null, int $flags = 0): array
}

Propiedades

name

Nombre de la clase del objeto. De sólo lectura, lanza una ReflectionException en el intento de escribir .

Tabla de contenidos

add a note

User Contributed Notes 3 notes

up
7
marcel dot nolte at noltecomputer dot de
14 years ago
To simply enlist all methods and properties of an object simply write:

<?php ReflectionObject::export($yourObject); ?>

,which will cause an var_export-like output.
up
3
ccb_bc at hotmail dot com
4 years ago
<?php
class FullReflectionObject {

/**
* @var obj => $ReflectionObject = propriedade que representa o objeto $ReflectionObject
* @var obj => $ReflectionProperty = propriedade que representa o objeto $ReflectionProperty
* @var obj => $ReflectionMethod = propriedade que representa o objeto $ReflectionMethod
* @var obj => $ReflectionParameter = propriedade que representa o objeto $ReflectionParameter
* @var bol => $reflect_object = true se o método object() for invocado
* @var bol => $reflect_property = true se o método property() for invocado
* @var bol => $reflect_method = true se o método method() for invocado
* @var bol => $reflect_parameter = true se o método parameter() for invocado
*/

private $ReflectionObject;
private
$ReflectionProperty;
private
$ReflectionMethod;
private
$ReflectionParameter;
private
$reflect_object = false;
private
$reflect_property = false;
private
$reflect_method = false;
private
$reflect_parameter = false;

/**
* @param obj => $object = objeto a ser refletido
*/
public function object(object $object) : object {
$this->reflect_object = true;
$this->ReflectionObject = new \ReflectionObject($object);
return
$this;
}

/**
* @param str => $class_name = nome da classe o qual a properiedade ser refletida pertence
* @param str => $property = nome da properiedade a ser refletida
*/
public function property(string $class_name, string $property) : object {
$this->reflect_property = true;
$this->ReflectionProperty = new \ReflectionProperty($class_name, $property);
return
$this;
}

/**
* @param str => $class_name = nome da classe o qual o método ser refletido pertence
* @param str => $method = nome do método a ser refletido
*/
public function method(string $class_name, string $method) : object {
$this->reflect_method = true;
$this->ReflectionMethod = new \ReflectionMethod($class_name, $method);
return
$this;
}

/**
* @param str => $class_name = nome da classe o qual o parametro a ser refletido pertence
* @param str => $method = nome do método o qual o parametro a ser refletido pertence
* @param str => $parameter = nome do parametro a ser refletido
*/
public function parameter(string $class_name, string $method, string $parameter) : object {
$this->reflect_parameter = true;
$this->ReflectionParameter = new \ReflectionParameter(array($class_name, $method), $parameter);
return
$this;
}

public function
__call($methodName, $args){
if(
$this->reflect_object){
return
call_user_func_array(array($this->ReflectionObject, $methodName), $args);
}
if(
$this->reflect_property){
return
call_user_func_array(array($this->ReflectionProperty, $methodName), $args);
}
if(
$this->reflect_method){
return
call_user_func_array(array($this->ReflectionMethod, $methodName), $args);
}
if(
$this->reflect_parameter){
return
call_user_func_array(array($this->ReflectionParameter, $methodName), $args);
}
}
}

// Digamos que você tenha no seu projeto a classe Client do pacote Guzzle
$FullReflectionObject = new FullReflectionObject;
var_dump($FullReflectionObject->object(new GuzzleHttp\Client)->getMethods());
var_dump($FullReflectionObject->property('GuzzleHttp\Client', 'config')->isPrivate());
var_dump($FullReflectionObject->method('GuzzleHttp\Client', 'buildUri')->isPrivate());
var_dump($FullReflectionObject->parameter('GuzzleHttp\Client', 'send', 'options')->getDefaultValue());
up
-20
kuldipem at gmail dot com
8 years ago
class a {
const abc = 1;
public function __get($key){
$r = new ReflectionObject($this);
if($r->hasConstant($key)){ return $r->getConstant($key); }
}
}
class b {
public function getA(){
return new a();
}
}
$b = new b();
var_dump($b->getA()::abc);
var_dump($b->getA()::def);
To Top