什么是注解?
提起注解第一个联想到的编程语言就是 JAVA。注解提供一种非侵入式的方式扩展代码逻辑,注解的常见使用范围:文档生成、数据检查、运行时的动态处理、编译时的动态处理。PHP 官方是不支持注解功能的、如果要实现注解功能要不自己实现、要不使用第三方包。今天主要介绍通过第三方包的方式实现 PHP 注解功能。
安装 doctrine/annotations
通过扫描注解、将注解映射为 Class 进行处理
$ composer require doctrine/annotations
创建注解
/**
* @Annotation
* @Target({"PROPERTY"})
*/
final class TestAnnotations
{
/**
* @Required()
*
* @var string
*/
public $name;
}
@Annotation:标记是一个注解类
@Target:标记注解生效范围 (ALL,CLASS,METHOD,PROPERTY,ANNOTATION)
@Required:标记该属性是必须的
使用注解
class Test
{
/**
* @TestAnnotations(name="我是一个注解")
*/
private $name;
}
读取注解
$reflectionClass = new ReflectionClass(Test::class);
$reder = new AnnotationReader();
$annotation = $reder->getPropertyAnnotation(
$reflectionClass->getProperty('name'),
TestAnnotations::class);
echo $annotation->name; // result: "我是一个注解"
实际使用
因为近期的一个需求需要多个系统的数据进行聚合展示,因为只能通过调用旧的 API 获取数据造成多个系统的数据字段不同。因为为了完成数据清洗我们可以引入注解。先定义好返回的结构体Class,每个属性上添加注解标记各个系统的字段名称、以及数据最终返回的类型,各个系统返回的数据作为参数传入,通过对注解的读取进行数据的转换。