注解語(yǔ)法包含以下幾部分。
首先,注解聲明總是以 #[
開(kāi)頭,以
]
結尾來(lái)包圍。
內部則是一個(gè)或以逗號包含的多個(gè)注解。
注解的名稱(chēng)按 使用命名空間:基礎
章節中描述,可以是非限定、限定、完全限定的名稱(chēng)。
注解的參數是可以選的,以常見(jiàn)的括號()
包圍。
注解的參數可以是字面值或者常量表達式。
它同時(shí)接受位置參數和命名參數兩種語(yǔ)法。
通過(guò)反射 API 請求注解實(shí)例時(shí),注解的名稱(chēng)會(huì )被解析到一個(gè)類(lèi),注解的參數則傳入該類(lèi)的構造器中。 因此每個(gè)注解都需要引入一個(gè)類(lèi)。
示例 #1 注解語(yǔ)法
<?php
// a.php
namespace MyExample;
use Attribute;
#[Attribute]
class MyAttribute
{
const VALUE = 'value';
private $value;
public function __construct($value = null)
{
$this->value = $value;
}
}
// b.php
namespace Another;
use MyExample\MyAttribute;
#[MyAttribute]
#[\MyExample\MyAttribute]
#[MyAttribute(1234)]
#[MyAttribute(value: 1234)]
#[MyAttribute(MyAttribute::VALUE)]
#[MyAttribute(array("key" => "value"))]
#[MyAttribute(100 + 200)]
class Thing
{
}
#[MyAttribute(1234), MyAttribute(5678)]
class AnotherThing
{
}