前言
随着Swoole的不断的迭代,相应一些Swoole的协程框架也逐渐进入了大家的视野,比如:Hyperf、Swoft等;常驻内存的实现让PHP性能比传统PHP-FPM模式的框架有质的提升,依据Swoole开源的框架都提供了全面的开发组件,看过或使用过Hyperf、Swoft框架的小伙伴应该都知道,这些框架当中有类似SpringCloud框架灵活的注解,本文就以一个简单的demo实现一个注解的实现,方便大家更快速的了解注解。
什么是注解
注解的定义是:附加在数据/代码上的元数据(metadata)。
框架可以基于这些元信息为代码提供各种额外功能,本质上注解就是理解注解只是配置的另一种展现方式。
注解如何工作的
注解是如何在代码里面被识别,又是如何被调用的呢?带着疑问咱们一起来看代码,GitHub:https://github.com/LoyaltyLu/annotation_demo这是我写的一个demo,里面包含了注解以及实现容器的一个简单的示例方便大家参看,再看文章前建议大家先看下这两个文档:Doctrine AnnotationsPHP反射
代码解析
注解收集
带大家通过demo简单了解下注解是如何被收集的。
类注解收集
index.php
<?php
$loader = require __DIR__ . "/vendor/autoload.php";
Core\Application::init($loader);
......
var_dump(\Core\Route::dispatch('/index/test'));
首先在index.php中使用composer 自动加载传入封装好的Application
一个处理器类;调用init
方法初始化。
Core\Application.php
<?php
namespace Core;
use Annotation\Parser\RequestMappingParser;
use Doctrine\Common\Annotations\AnnotationRegistry;
use \Doctrine\Common\Annotations;
/**
* 相当于一个处理器,做一些初始化工作
* Class Application
*
* @package Core
*