To simply enlist all methods and properties of an object simply write:
<?php ReflectionObject::export($yourObject); ?>
,which will cause an var_export-like output.
(PHP 5, PHP 7, PHP 8)
La clase ReflectionObject reporta información sobre un object.
Nombre de la clase del objeto. De sólo lectura, lanza una ReflectionException en el intento de escribir .
To simply enlist all methods and properties of an object simply write:
<?php ReflectionObject::export($yourObject); ?>
,which will cause an var_export-like output.
<?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());
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);