Doctrine注释提供了为PHP类实现自定义注释功能的功能(这里使用的是v1.6版本)。
composer require doctrine/annotations
官方链接:https://www.doctrine-project.org/projects/doctrine-annotations/en/1.6/index.html#introduction
使用大概步骤:
- 定一个注释模板文件
- 在类文件中使用注释(可以看做是给模板赋值)
- 读取注释
# Route.php (定义一个注解模板)
<?php namespace Util\Annotation; use Doctrine\Common\Annotations\Annotation\Attributes; //use Doctrine\Common\Annotations\Annotation\Enum; //use Doctrine\Common\Annotations\Annotation\Required; /** * 创建一个注释类 * * Annotation表示该类是一个注解类 Target表示注解生效的范围(ALL,CLASS,METHOD,PROPERTY,ANNOTATION) * * @Annotation * @Target({"METHOD","CLASS"}) * 也可以在这里变量声明类型 * @Attributes({ * @Attribute("time", type = "int") * }) */ final class Route { /** * @Required() * @var string */ public $route; /** * @Enum({"POST", "GET", "PUT", "DELETE"}) * @var string */ public $method; /** * @var array */ public $param; public $time; public function say() { echo 'hello'; } }
# run.php (使用、读取)
<?php require 'vendor/autoload.php'; use Util\Annotation\Route; use Doctrine\Common\Annotations\AnnotationReader; use Doctrine\Common\Annotations\FileCacheReader; use Doctrine\Common\Annotations\AnnotationRegistry; /** * Class UserController * 模拟在User控制其中定义注解路由 * @author 银酱 */ class UserController { /** * 列表 * @Route(route="/user/index",method="GET") */ public function index() { echo __METHOD__; } /** * 注册 * @Route(route="/user/register",method="POST",param={"token","access"},time=123) */ public function register() { echo __METHOD__; } /** * 显示 * @Route(route="/user/info",method="POST") */ public function info() { echo __METHOD__; } /** * 更新 * @Route(route="/user/update",method="POST") */ public function update() { } /** * 删除 * @Route(route="/user/info",method="DELETE") */ public function delete() { echo __METHOD__; } } //echo '<pre>'; // 注释使用自己的自动加载机制来确定给定的注释是否具有可以自动加载的对应PHP类 // 配置注释自动加载(2.0版本中已剔除) AnnotationRegistry::registerLoader('class_exists'); //