当前位置:首页 > PHP

php实现注解

2026-02-15 00:05:54PHP

在PHP中实现注解(Annotation)可以通过多种方式完成,以下是一种常见的方法:

使用反射和DocBlock解析

PHP原生支持通过反射获取类、方法或属性的文档注释(DocBlock),结合第三方库(如doctrine/annotations)可以解析注解。

安装依赖库:

composer require doctrine/annotations

定义注解类:

use Doctrine\Common\Annotations\Annotation;

/
 * @Annotation
 * @Target("METHOD")
 */
class Route {
    public $path;
    public $methods = [];
}

使用注解:

class MyController {
    /
     * @Route(path="/user", methods={"GET"})
     */
    public function getUser() {
        // 方法逻辑
    }
}

解析注解:

use Doctrine\Common\Annotations\AnnotationReader;

$reader = new AnnotationReader();
$reflectionMethod = new ReflectionMethod('MyController', 'getUser');
$routeAnnotation = $reader->getMethodAnnotation($reflectionMethod, Route::class);

echo $routeAnnotation->path; // 输出: /user

使用原生PHP8 Attributes

PHP8原生支持Attributes(注解的官方实现),无需第三方库。

定义Attribute类:

#[Attribute(Attribute::TARGET_METHOD)]
class Route {
    public function __construct(
        public string $path,
        public array $methods = []
    ) {}
}

使用Attribute:

class MyController {
    #[Route(path: '/user', methods: ['GET'])]
    public function getUser() {
        // 方法逻辑
    }
}

解析Attribute:

$reflectionMethod = new ReflectionMethod('MyController', 'getUser');
$attributes = $reflectionMethod->getAttributes(Route::class);

foreach ($attributes as $attribute) {
    $route = $attribute->newInstance();
    echo $route->path; // 输出: /user
}

自定义注解解析方案

如需更轻量级的方案,可以自行解析DocBlock:

function parseAnnotations(string $docComment): array {
    preg_match_all('/@(\w+)(?:\s*(?:\(\s*)?(.*?)(?:\s*\))?)?\s*(?:\n|\*\/)/', $docComment, $matches);
    $annotations = [];
    foreach ($matches[1] as $i => $name) {
        $annotations[$name] = $matches[2][$i] ?? true;
    }
    return $annotations;
}

$docComment = (new ReflectionMethod('MyController', 'getUser'))->getDocComment();
$annotations = parseAnnotations($docComment);

php实现注解

标签: 注解php
分享给朋友:

相关文章

php实现打印功能

php实现打印功能

PHP 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaS…

php记住密码怎么实现

php记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

php实现队列

php实现队列

PHP实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_shi…

php如何实现直播

php如何实现直播

实现直播功能的方法 PHP可以通过结合其他技术和工具来实现直播功能。以下是几种常见的方法: 使用流媒体服务器 配置流媒体服务器如Nginx-RTMP、Red5或Wowza。这些服务器支持RTMP协…

php实现登录

php实现登录

PHP 登录功能实现 数据库连接与用户表创建 创建一个数据库连接文件 db.php,用于管理数据库连接。MySQL 示例代码如下: <?php $host = 'localhost'; $d…

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…