Start · Sprachen · PHP · Referenz · DelayedTargetValidation

DelayedTargetValidation

Klasse

Attribut, das die Validierung eines Ziels auf einen späteren Zeitpunkt verschiebt.

seit PHP 8.0.0 Kategorie: misc

Signatur

#[DelayedTargetValidation]

Beschreibung

DelayedTargetValidation ist ein PHP-Attribut, das die Validierung des Einsatzortes (Targets) eines anderen Attributs auf einen späteren Zeitpunkt verschiebt. Normalerweise prüft PHP beim Auslesen von Attributen per ReflectionAttribute::getTarget() sofort, ob das Attribut an einem gültigen Ziel (z. B. Klasse, Methode, Property) verwendet wurde. Mit DelayedTargetValidation lässt sich diese Prüfung zurückstellen.

Dieses Attribut ist vor allem für Frameworks und Bibliotheken relevant, die eigene Attribut-Systeme aufbauen und flexible Validierungsstrategien benötigen. Es ermöglicht, Attribute zunächst ohne sofortige Fehlerprüfung zu registrieren und die Validierung erst zum Zeitpunkt der tatsächlichen Nutzung durchzuführen.

Typischerweise wird DelayedTargetValidation auf benutzerdefinierte Attribut-Klassen angewendet, um das Validierungsverhalten zu steuern. Es ist kein Bestandteil des alltäglichen Applikationscodes, sondern ein Werkzeug für Metaprogrammierung und Attribut-Framework-Entwicklung.

Hinweis: Dieses Attribut ist Teil des internen PHP-Attribut-Systems und steht im Namespace Attribute. Die genaue Verfügbarkeit und das Verhalten können je nach PHP-Version variieren.

Beispiele

DelayedTargetValidation auf einem benutzerdefinierten Attribut

<?php
use Attribute;

#[Attribute(Attribute::TARGET_ALL)]
#[\DelayedTargetValidation]
class MeinFlexiblesAttribut
{
    public function __construct(public readonly string $beschreibung = '') {}
}

// Das Attribut kann nun an verschiedenen Zielen eingesetzt werden,
// ohne dass die Zielvalidierung sofort ausgeführt wird.
#[MeinFlexiblesAttribut('Beispielklasse')]
class BeispielKlasse
{
    #[MeinFlexiblesAttribut('Beispielmethode')]
    public function beispielMethode(): void {}
}

$reflection = new ReflectionClass(BeispielKlasse::class);
$attribute = $reflection->getAttributes(MeinFlexiblesAttribut::class)[0];
$instanz = $attribute->newInstance();
echo $instanz->beschreibung;
Beispielklasse

Reflection-basiertes Auslesen mit verzögerter Validierung

<?php
use Attribute;

#[Attribute(Attribute::TARGET_CLASS | Attribute::TARGET_METHOD)]
#[\DelayedTargetValidation]
class Route
{
    public function __construct(
        public readonly string $pfad,
        public readonly string $methode = 'GET'
    ) {}
}

#[Route('/home')]
class HomeController
{
    #[Route('/home/index', 'POST')]
    public function index(): void {}
}

$refKlasse = new ReflectionClass(HomeController::class);
foreach ($refKlasse->getAttributes(Route::class) as $attr) {
    $route = $attr->newInstance();
    echo 'Klassen-Route: ' . $route->pfad . PHP_EOL;
}

$refMethode = new ReflectionMethod(HomeController::class, 'index');
foreach ($refMethode->getAttributes(Route::class) as $attr) {
    $route = $attr->newInstance();
    echo 'Methoden-Route: ' . $route->pfad . ' (' . $route->methode . ')' . PHP_EOL;
}
Klassen-Route: /home Methoden-Route: /home/index (POST)

// Wichtig · Fallstricke

Achtung: DelayedTargetValidation ist ein internes PHP-Attribut und kein öffentlich dokumentierter Bestandteil der PHP-Standardbibliothek. Die Verfügbarkeit und das genaue Verhalten können sich zwischen PHP-Versionen unterscheiden. Für produktiven Code sollte die PHP-Dokumentation der jeweiligen Zielversion konsultiert werden.

Der Einsatz dieses Attributs ist in der Regel nur sinnvoll, wenn ein eigenes Attribut-Framework entwickelt wird und die Standard-Zielvalidierung von PHP zu restriktiv oder zu früh greift. Für normale Anwendungsentwicklung ist DelayedTargetValidation nicht erforderlich.