SymfonyWorld Online 2022 Winter Edition

La classe ReflectionObject

(PHP 5, PHP 7, PHP 8)

Introduction

La classe ReflectionObject rapporte des informations sur un object.

Synopsis de la classe

class ReflectionObject extends ReflectionClass {
/* Constants héritées */
/* Propriétés héritées */
public string $name;
/* Méthodes */
public __construct(object $object)
/* Méthodes héritées */
public static ReflectionClass::export(mixed $argument, bool $return = false): string
public ReflectionClass::getAttributes(?string $name = null, int $flags = 0): array
public ReflectionClass::getConstant(string $name): mixed
public ReflectionClass::getConstants(?int $filter = null): array
public ReflectionClass::getDocComment(): string|false
public ReflectionClass::getEndLine(): int|false
public ReflectionClass::getFileName(): string|false
public ReflectionClass::getMethods(?int $filter = null): array
public ReflectionClass::getName(): string
public ReflectionClass::getProperties(?int $filter = null): array
public ReflectionClass::getReflectionConstants(?int $filter = null): array
public ReflectionClass::getStartLine(): int|false
public ReflectionClass::getStaticPropertyValue(string $name, mixed &$def_value = ?): mixed
public ReflectionClass::hasConstant(string $name): bool
public ReflectionClass::hasMethod(string $name): bool
public ReflectionClass::hasProperty(string $name): bool
public ReflectionClass::isInstance(object $object): bool
public ReflectionClass::newInstance(mixed ...$args): object
public ReflectionClass::newInstanceArgs(array $args = []): ?object
public ReflectionClass::setStaticPropertyValue(string $name, mixed $value): void
}

Sommaire

add a note

User Contributed Notes 3 notes

up
7
marcel dot nolte at noltecomputer dot de
12 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
2
ccb_bc at hotmail dot com
3 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
-17
kuldipem at gmail dot com
7 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