Es ist empfehlenswert, für jedes Attribut eine eigene Klasse zu definieren.
Im einfachsten Fall genügt eine leere Klasse, in der das Attribut
#[Attribute] deklariert wird. Das Attribut kann mit
einer use-Anweisung aus dem globalen Namensraum
importiert werden.
Beispiel #1 Einfache Attributklasse
<?php
namespace Example;
use Attribute;
#[Attribute]
class MyAttribute
{
}
Um die Arten der Deklarationen einzuschränken, auf die ein Attribut
angewendet werden kann, kann eine Bitmaske als erstes Argument an die
#[Attribute]-Deklaration übergeben werden.
Beispiel #2 Verwendung der Zielspezifikation, um die Verwendung von Attributen zu beschränken
<?php
namespace Example;
use Attribute;
#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION)]
class MyAttribute
{
}Wenn MyAttribute für einen anderen Typ deklariert wird, wird nun beim Aufruf von ReflectionAttribute::newInstance() eine Exception ausgelöst.
Die folgenden Ziele können angegeben werden:
Attribute::TARGET_CLASSAttribute::TARGET_FUNCTIONAttribute::TARGET_METHODAttribute::TARGET_PROPERTYAttribute::TARGET_CLASS_CONSTANTAttribute::TARGET_PARAMETERAttribute::TARGET_ALL
Standardmäßig kann ein Attribut nur einmal pro Deklaration verwendet
werden. Damit ein Attribut wiederholbar ist, muss es in der Bitmaske der
#[Attribut]-Deklaration mit dem Flag
Attribute::IS_REPEATABLE angegeben werden.
Beispiel #3 Verwendung von IS_REPEATABLE um ein Attribut mehrfach in einer Deklaration zu erlauben
<?php
namespace Example;
use Attribute;
#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION | Attribute::IS_REPEATABLE)]
class MyAttribute
{
}