## 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:

- `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
{
}`
`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open