Se recomienda definir una clase separada para cada atributo. En el caso más simple,
una clase vacía con la declaración #[Attribute]
es suficiente.
El atributo puede ser importado desde el espacio de nombres global utilizando una declaración
use
.
Ejemplo #1 Clase de atributo simple
<?php
namespace Example;
use Attribute;
#[Attribute]
class MyAttribute
{
}
Para restringir los tipos de declaraciones a los que se puede aplicar un atributo,
pasa una máscara de bits como primer argumento en la declaración
#[Attribute]
Ejemplo #2 Usar la especificación de destino para restringir dónde se pueden usar los atributos
<?php
namespace Example;
use Attribute;
#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION)]
class MyAttribute
{
}
Declarar MyAttribute en otro tipo ahora generará una excepción durante la llamada a ReflectionAttribute::newInstance()
Los siguientes destinos se pueden especificar:
Attribute::TARGET_CLASS
Attribute::TARGET_FUNCTION
Attribute::TARGET_METHOD
Attribute::TARGET_PROPERTY
Attribute::TARGET_CLASS_CONSTANT
Attribute::TARGET_PARAMETER
Attribute::TARGET_ALL
Por defecto, un atributo solo se puede usar una vez por declaración. Para permitir
que un atributo sea repetible, especifícalo en la máscara de bits de la
declaración #[Attribute]
utilizando el
flag Attribute::IS_REPEATABLE
Ejemplo #3 Usar IS_REPEATABLE para permitir que un atributo se use varias veces en una declaración
<?php
namespace Example;
use Attribute;
#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION | Attribute::IS_REPEATABLE)]
class MyAttribute
{
}