- 所谓反射就是定义好一个类之后,通过ReflectionClass读取类的名字从而获取类结构信息的过程
class mycoach {protected $name;protected $age;public function __construct($name,$age){$this->name = $name;$this->age = $age;}public function eat(){echo "嗯,吃点增加体能的东西".PHP_EOL;} }
- 拿到一个反射对象
$coach = new mycoach('陈培昌',22);
$a = new ReflectionClass('mycoach');
if($a->isInstantiable())
{
echo "科学的饮食和训练".PHP_EOL;
}
$myattributes = $a->getConstructor();
var_dump($myattributes);
输出结果:
科学的饮食和训练 object(ReflectionMethod)#3 (2) {["name"]=>string(11) "__construct"["class"]=>string(7) "mycoach" }
- 方法一 getProperties() 注意!要想实现两个属性的打印,务必在类结构体中声明两个保护属性 (例如:protected $name)
$property = $a->getProperties(); print('=================property================='.PHP_EOL); var_dump($property);
输出结果:
=================property================= array(2) {[0]=>object(ReflectionProperty)#4 (2) {["name"]=>string(4) "name"["class"]=>string(7) "mycoach"}[1]=>object(ReflectionProperty)#5 (2) {["name"]=>string(3) "age"["class"]=>string(7) "mycoach"} }
- 方法二 getMethods() getname()
print('=================methods================='.PHP_EOL); var_dump($a->getMethods()); print('=================methods by row================='.PHP_EOL);foreach($a->getMethods() as $method) {echo $method->getName().PHP_EOL; }
输出结果:
=================methods================= array(2) {[0]=>object(ReflectionMethod)#6 (2) {["name"]=>string(11) "__construct"["class"]=>string(7) "mycoach"}[1]=>object(ReflectionMethod)#7 (2) {["name"]=>string(3) "eat"["class"]=>string(7) "mycoach"} } =================methods by row================= __construct eat
- hasMethod() getMethod()
print('=================execute================='.PHP_EOL);if($a->hasMethod('eat')) {$method= $a->getMethod('eat');print_r($method); }
输出结果:
=================execute================= ReflectionMethod Object ([name] => eat[class] => mycoach )Process finished with exit code 0
- 复制粘贴---快速测试
<?php class mycoach {protected $name;protected $age;public function __construct($name,$age){$this->name = $name;$this->age = $age;}public function eat(){echo "嗯,吃点增加体能的东西".PHP_EOL;} } $coach = new mycoach('陈培昌',22); $a = new ReflectionClass('mycoach'); if($a->isInstantiable()) {echo "科学的饮食和训练".PHP_EOL; } $myattributes = $a->getConstructor(); var_dump($myattributes); $property = $a->getProperties(); print('=================property================='.PHP_EOL); var_dump($property); print('=================methods================='.PHP_EOL); var_dump($a->getMethods()); print('=================methods by row================='.PHP_EOL);foreach($a->getMethods() as $method) {echo $method->getName().PHP_EOL; } print('=================execute================='.PHP_EOL);if($a->hasMethod('eat')) {$method= $a->getMethod('eat');print_r($method); }