ReflectionObject 类

(PHP 5、PHP 7、PHP 8)

介绍

ReflectionObject 类报告有关 对象 的信息。

类概要

class ReflectionObject extends ReflectionClass {
/* 继承的常量 */
/* 继承的属性 */
public string $name;
/* 方法 */
public __construct(object $object)
/* 继承的方法 */
public static ReflectionClass::export(mixed $argument, bool $return = false): string
public ReflectionClass::getAttributes(?string $name = null, int $flags = 0): array
}

变更日志

版本 描述
8.0.0 ReflectionObject::export() 已被移除。

目录

添加一个注释

用户贡献注释 3 个注释

6
marcel dot nolte at noltecomputer dot de
14 年前
要简单列出对象的所有方法和属性,只需编写

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

这将导致类似于 var_export 的输出。
3
ccb_bc at hotmail dot com
5 年前
<?php
class FullReflectionObject {

/**
* @var obj => $ReflectionObject = 代表 $ReflectionObject 对象的属性
* @var obj => $ReflectionProperty = 代表 $ReflectionProperty 对象的属性
* @var obj => $ReflectionMethod = 代表 $ReflectionMethod 对象的属性
* @var obj => $ReflectionParameter = 代表 $ReflectionParameter 对象的属性
* @var bol => $reflect_object = 如果调用 object() 方法,则为 true
* @var bol => $reflect_property = 如果调用 property() 方法,则为 true
* @var bol => $reflect_method = 如果调用 method() 方法,则为 true
* @var bol => $reflect_parameter = 如果调用 parameter() 方法,则为 true
*/

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 = 要反射的对象
*/
public function object(object $object) : object {
$this->reflect_object = true;
$this->ReflectionObject = new \ReflectionObject($object);
return
$this;
}

/**
* @param str => $class_name = 要反射属性所属的类名
* @param str => $property = 要反射的属性名
*/
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 = 要反射方法所属的类名
* @param str => $method = 要反射的方法名
*/
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 = 要反射参数所属的类名
* @param str => $method = 要反射参数所属的方法名
* @param str => $parameter = 要反射的参数名
*/
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);
}
}
}

// 假设您在项目中使用 Guzzle 包中的 Client 类
$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());
-20
kuldipem at gmail dot com
9 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