🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
什么是反射? 动态获取 类的方法、属性、参数,注释 等 信息以及动态调用对象的方法的功能称为反射API。 反射是操纵面向对象范型中元模型的API,其功能十分强大,可帮助我们构建复杂,可扩展的应用。 反射类/函数的功能 可以获取类的一切信息,包括: 1. 类基本信息(类名、是否是抽象类、是否可实例化、类是否为final或者abstract) 2. 类的方法、方法是否存在、方法返回值、方法的注释、Method Names 3. 类的属性,静态属性,常量 4. 所在命名空间 Namespace $boy = new HandsonBoy(); echo $boy->name.'<br />'; $boy->hair = 'short'; 用反射来获取类的属性 $reflect = new ReflectionObject($boy); 实例化这一步最重要 $props = $reflect->getProperties(); //反射遍历属性 foreach ($props as $prop){ var_dump($prop->getName().PHP_EOL); } $methods = $reflect->getMethods(); foreach ($methods as $method){ var_dump($method->getName().PHP_EOL); } ``` <?php class HandsonBoy { private $name = 'gao'; private $age = 23; public function __set($name, $value) { echo '您正在设置私有属性'.$name.'<br>'; $this->name = $value; } public function __get($name) { if (!isset($this->$name)) { echo '未设置'.$name; $this->name = '正为你设置默认值'; } return $this->name; } private function index() { echo 'hhhh'; } } $boy = new HandsonBoy(); //echo $boy->name; $reflect = new ReflectionObject($boy); $props = $reflect->getProperties(); foreach ($props as $prop) { var_dump($prop->getName().PHP_EOL); } $methods = $reflect->getMethods(); foreach ($methods as $method){ if ($method->getName() == 'index') { $method->getName(); } } ```