注解,简而言之,就是解析注释中的一些东西,获得一个结构化的结果,用来实现一些操作。

DOF 大量使用了注解,来实现路由、实体、仓库、ORM 等的功能定义和关联。

组成元素

  • 注解标识符号/基本格式:@Annotation(...){...}

  • 注解名称/KEY: Annotation 中就是注解名,只能由英文字母和数字组成。

  • 注解值: (...) 中的 ... 就是注解值。

  • 注解参数/附加选项: {...} 中的 ... 就是注解附加选项,注解附加选项内部格式是 URL Query String 风格的格式,比如 a=b&c=d

正则表达式描述

#@([a-zA-z\d]+)\((.*)\)(\{(.*)\})?#

例子

@Route(users)

@Argument(id){need:1&min:1=ID必须是正整数}

@HeaderStatus(201){创建成功}

@Type(Bint)

@Entity(Domain\User\Entity\User)

@Implementor(Domain\User\Storage\MySQL\UserORM)

存在位置

注解只能存在与 DocComment 风格的代码注释中的某一行。即:

/** * @Route(users) * @Verb(GET) */ public function list() { // ... }

更进一步细分,根据注解存在类文件中注释的位置还可以把注解分类为:类注解、类属性注解、类方法注解

而且一般情况下,除非特殊说明,类属性和类方法均可继承类的注解。

优缺点

  • 优点:以声明式编程风格去定义一些逻辑想要达到的目标、两个目标的关系等,可以大量减少重复业务代码的编写。

  • 优点:方便自动化,包括了接口文档自动化、数据库 Schema 自动同步。

  • 优点:方便实现抽象的依赖注入。

  • 缺点:注解需要编译成 PHP 能识别的结构,因此需要牺牲一些性能。不过部署的时候可以事先编译好,以跳过编译过程。

results matching ""

    No results matching ""