(PHP 8 >= 8.5.0)
Este atributo atrasa os erros de validação de destino para atributos internos do momento da compilação até o momento em que o atributo é instanciado por meio da API de Reflexão.
Quando aplicado a uma declaração, qualquer uso inválido de atributos internos no mesmo destino não acionará um erro de tempo de compilação. Em vez disso, a validação é adiada e realizada quando o atributo é instanciado por meio de ReflectionAttribute::newInstance().
Isso visa principalmente a compatibilidade futura, permitindo que o código use atributos que podem obter destinos válidos adicionais em versões futuras do PHP sem quebrar em versões mais antigas.
Exemplo #1 Atrasar a validação de um destino inválido
<?php
class Base {
protected function foo(): void {}
}
class Child extends Base {
#[\DelayedTargetValidation]
#[\Override]
public const NAME = 'child';
#[\Override]
protected function foo(): void {}
}Em versões do PHP onde Override não é permitido em constantes de classe, isso não produz um erro de tempo de compilação.
Exemplo #2 A validação ocorre durante a reflexão
<?php
$reflection = new ReflectionClassConstant(Child::class, 'NAME');
foreach ($reflection->getAttributes() as $attribute) {
$attribute->newInstance(); // Pode lançar exceção se for inválido
}Quando qualquer atributo aplicado ao mesmo destino (exceto o próprio DelayedTargetValidation) é instanciado via reflexão usando ReflectionAttribute::newInstance(), a validação do destino é realizada e uma exceção pode ser lançada se o atributo for usado em um destino não suportado.
Este atributo afeta apenas a validação de destino dos atributos internos.
Não suprime a validação funcional realizada por esses atributos. Por exemplo, Override ainda emitirá um erro se um método não sobrescrever de fato um método pai.