手写PHP API框架(三)之反射介绍
上一篇《手写PHP API框架之Composer的安装使用(二)》文章中我们介绍了Composer的安装使用,这一文我们来介绍一下有关反射的概念介绍。
反射,直观理解就是根据到达地找到出发地和来源。 反射指在PHP运行状态中,扩展分析PHP程序,导出或提出关于类、方法、属性、参数等的详细信息,包括注释。这种动态获取信息以及动态调用对象方法的功能称为反射API。
不妨先来看一个demo:
<?php
function p($msg, $var)
{
echo($msg.":".print_r($var, true)).PHP_EOL.PHP_EOL;
}
class Demo
{
private $id;
protected $name;
public $skills = [];
public function __construct($id, $name, $skills = [])
{
$this->id = $id;
$this->name = $name;
$this->skills = $skills;
}
public function getName()
{
return $this->name;
}
public function getSkill()
{
p('skill', $this->skills);
}
}
$ref = new ReflectionClass('Demo');
if ($ref->isInstantiable()) {
p('检查类是否可实例化isInstantiable', null);
}
$constructor = $ref->getConstructor();
p('获取构造函数getConstructor', $constructor);
$parameters = $constructor->getParameters();
foreach ($parameters as $param) {
p('获取参数getParameters', $param);
}
if ($ref->hasProperty('name')) {
$attr = $ref->getProperty('name');
p('获取属性getProperty', $attr);
}
$attributes = $ref->getProperties();
foreach ($attributes as $row) {
p('获取属性列表getProperties', $row->getName());
}
if ($ref->hasMethod('getSkill')) {
$method = $ref->getMethod('getSkill');
p('获取方法getMethod', $method);
}
$methods = $ref->getMethods();
foreach ($methods as $row) {
p('获取方法列表getMethods', $row->getName());
}
$instance = $ref->newInstanceArgs([1, 'sai', ['php', 'js']]);
p('newInstanceArgs', $instance);
登录后复制

