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_CLASS
Attribute::TARGET_FUNCTION
Attribute::TARGET_METHOD
Attribute::TARGET_PROPERTY
Attribute::TARGET_CLASS_CONSTANT
Attribute::TARGET_PARAMETER
Attribute::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
{
}