Deklaration von Attributklassen

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:

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
{
}