Il est recommandé de définir une classe distincte pour chaque attribut. Dans le cas le plus simple,
une classe vide avec la déclaration #[Attribute] est suffisante.
L'attribut peut être importé depuis l'espace de noms global à l'aide d'une instruction use.
Exemple #1 Classe d'attribut simple
<?php
namespace Example;
use Attribute;
#[Attribute]
class MyAttribute
{
}
Pour restreindre les types de déclarations auxquels un attribut peut être appliqué,
passez un masque de bits en premier argument de la déclaration #[Attribute].
Exemple #2 Utilisation de la spécification de la cible pour restreindre l'utilisation des attributs
<?php
namespace Example;
use Attribute;
#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION)]
class MyAttribute
{
}La déclaration de MyAttribute sur un autre type lèvera désormais une exception lors de l'appel à ReflectionAttribute::newInstance()
Les cibles suivantes peuvent être spécifiées:
Attribute::TARGET_CLASSAttribute::TARGET_FUNCTIONAttribute::TARGET_METHODAttribute::TARGET_PROPERTYAttribute::TARGET_CLASS_CONSTANTAttribute::TARGET_PARAMETERAttribute::TARGET_ALL
Par défaut, un attribut ne peut être utilisé qu'une seule fois par déclaration.
Pour autoriser un attribut à être répété, spécifiez-le dans le masque de bits
de la déclaration #[Attribute] en utilisant le drapeau
Attribute::IS_REPEATABLE.
Exemple #3 Utilisation de IS_REPEATABLE pour permettre à un attribut d'être utilisé plusieurs fois dans une déclaration
<?php
namespace Example;
use Attribute;
#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION | Attribute::IS_REPEATABLE)]
class MyAttribute
{
}