略微加速

PHP官方手册 - 互联网笔记

PHP - Manual: ReflectionObject

2024-04-28

ReflectionObject 类

(PHP 5, PHP 7, PHP 8)

简介

ReflectionObject 类报告了一个对象(object)的相关信息。

类摘要

class ReflectionObject extends ReflectionClass implements Reflector {
/* 常量 */
const integer IS_IMPLICIT_ABSTRACT = 16;
const integer IS_EXPLICIT_ABSTRACT = 32;
const integer IS_FINAL = 64;
/* 属性 */
public $name;
/* 方法 */
public static export(string $argument, bool $return = ?): string
/* 继承的方法 */
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::getMethods(int $filter = ?): array
public ReflectionClass::getName(): string
public ReflectionClass::getProperties(int $filter = ?): array
public ReflectionClass::getReflectionConstants(?int $filter = null): array
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::implementsInterface(string $interface): bool
public ReflectionClass::isInstance(object $object): bool
public ReflectionClass::isSubclassOf(string $class): bool
public ReflectionClass::newInstance(mixed $args, mixed $... = ?): object
public ReflectionClass::newInstanceArgs(array $args = ?): object
public ReflectionClass::setStaticPropertyValue(string $name, string $value): void
}

属性

name

对象的类名。只读,在尝试赋值的时候会抛出 ReflectionException

目录

add a noteadd 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);

官方地址:https://www.php.net/manual/en/class.reflectionobject.php

北京半月雨文化科技有限公司.版权所有 京ICP备12026184号-3