雖然沒(méi)有嚴格要求,推薦為每個(gè)注解創(chuàng )建一個(gè)實(shí)際的類(lèi)。
在這個(gè)最簡(jiǎn)單的例子中,通過(guò) use 語(yǔ)法從全局命名空間引入 #[Attribute] 注解所需要全空的類(lèi)。
示例 #1 簡(jiǎn)單的 Attribute 類(lèi)
<?php
namespace Example;
use Attribute;
#[Attribute]
class MyAttribute
{
}
要限制指定注解的聲明類(lèi)型,可為 #[Attribute] 注解第一個(gè)參數傳入字節位掩碼設置。
示例 #2 目標限定使用的注解
<?php
namespace Example;
use Attribute;
#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION)]
class MyAttribute
{
}
在另一個(gè)類(lèi)型中聲明 MyAttribute 會(huì )在調用 ReflectionAttribute::newInstance() 時(shí)拋出異常。
可以指定以下目標:
Attribute::TARGET_CLASSAttribute::TARGET_FUNCTIONAttribute::TARGET_METHODAttribute::TARGET_PROPERTYAttribute::TARGET_CLASS_CONSTANTAttribute::TARGET_PARAMETERAttribute::TARGET_ALL
注解在每個(gè)聲明中默認情況下只能使用一次。
如果需要重復,可以在 #[Attribute] 聲明中設置字節位掩碼。
示例 #3 使用 IS_REPEATABLE 允許注解在聲明中出現多次
<?php
namespace Example;
use Attribute;
#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION | Attribute::IS_REPEATABLE)]
class MyAttribute
{
}