Declarando Classes de Atributos
Embora não seja estritamente necessário, é recomendável criar uma classe real para cada atributo.
No caso mais simples, apenas uma classe vazia é necessária com o atributo #[Attribute]
declarado
que pode ser importado do namespace global com uma declaração use.
Example #1 Classe de Atributo Simples
<?php
namespace Example;
use Attribute;
#[Attribute]
class MyAttribute
{
}
Para restringir o tipo de declaração ao qual um atributo pode ser atribuído, uma máscara de bits pode ser passada
como o primeiro argumento para a declaração #[Attribute]
.
Example #2 Usando a especificação de destino para restringir onde os atributos podem ser usados
<?php
namespace Example;
use Attribute;
#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION)]
class MyAttribute
{
}
Declarar MyAttribute em outro tipo agora lançará uma exceção durante a chamada para ReflectionAttribute::newInstance()
Os seguintes alvos podem ser especificados:
Attribute::TARGET_CLASS
Attribute::TARGET_FUNCTION
Attribute::TARGET_METHOD
Attribute::TARGET_PROPERTY
Attribute::TARGET_CLASS_CONSTANT
Attribute::TARGET_PARAMETER
Attribute::TARGET_ALL
Por padrão, um atributo só pode ser usado uma vez por declaração. Se o atributo deve ser repetível nas declarações,
ele deve ser especificado como parte da máscara de bits para a declaração #[Attribute]
.
Example #3 Usando IS_REPEATABLE para permitir o atributo em uma declaração várias vezes
<?php
namespace Example;
use Attribute;
#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION | Attribute::IS_REPEATABLE)]
class MyAttribute
{
}