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