PHP 注解

预计阅读时间1 分 47 views

PHP 8 引入了注解功能,为代码中的类、方法、函数、属性等提供了声明式、结构化的元数据。通过注解,可以在代码中直接嵌入配置数据,并在运行时通过反射机制动态访问这些信息。这种设计提高了灵活性,使功能模块解耦,简化了配置管理。

注解的语法

• 注解使用 #[…] 包裹,其内部可以包含多个注解,多个注解用逗号分隔。

• 通常会为注解创建一个类,并在类上使用内置的 #[Attribute] 注解标记该类为一个有效的注解。

<?php

#[Attribute]
class Example {
    public string $message;

    public function __construct(string $message) {
        $this->message = $message;
    }
}

#[Example("This is a demo class.")]
class Demo {
    #[Example("This is a demo property.")]
    public string $property;

    #[Example("This is a demo method.")]
    public function method() {}
}
?>

使用反射获取注解

通过反射机制,可以读取注解并获取它的元数据内容。

<?php

// 定义注解类
#[Attribute]
class Example {
    public string $message;

    public function __construct(string $message) {
        $this->message = $message;
    }
}

// 定义一个带注解的类
#[Example("This is a demo class.")]
class Demo {
    #[Example("This is a demo property.")]
    public string $property;

    #[Example("This is a demo method.")]
    public function method() {}
}

// 通过反射获取注解信息
$reflectionClass = new ReflectionClass(Demo::class);
$classAttributes = $reflectionClass->getAttributes();

echo "Class Annotations:\n";
foreach ($classAttributes as $attribute) {
    $instance = $attribute->newInstance();
    echo $instance->message . PHP_EOL;
}

$reflectionMethod = $reflectionClass->getMethod('method');
$methodAttributes = $reflectionMethod->getAttributes();

echo "\nMethod Annotations:\n";
foreach ($methodAttributes as $attribute) {
    $instance = $attribute->newInstance();
    echo $instance->message . PHP_EOL;
}
?>

输出结果:

Class Annotations:
This is a demo class.

Method Annotations:
This is a demo method.

注解的功能依赖于反射 API,对性能敏感的场景需谨慎使用。

分享此文档

PHP 注解

或复制链接

本页目录