> Le 25 juil. 2025 à 18:37, Daniel Scherzer <daniel.e.scher...@gmail.com> a 
> écrit :
> 
> Hi internals,
> 
> The #[\Attribute] attribute is used to mark classes as being usable as 
> attributes. It currently does not trigger any error if added to a trait, 
> interface, enum, or abstract class. However, if any of those *were* used as 
> an attribute, calling ReflectionAttribute::newInstance() would fail; if you 
> are not going to call ReflectionAttribute::newInstance(), then you don't 
> really need to mark the trait/interface/enum/abstract class as an attribute.
> 
> I have proposed https://github.com/php/php-src/pull/19154 to add validation 
> to the #[Attribute] attribute, and it was suggested that I post here on the 
> mailing list in case there were any objections. So, are there?
> 
> -Daniel

Hi,

Validating more precisely the target of #[Atrribute] is reasonable. Now, 
observing that there are several internal attributes that may benefit this 
capability (e.g. #[Attribute], #[AllowDynamicProperties], #[Deprecated] on 
traits as currenty voted on), I wonder if we can also expose this capability to 
user-defined attributes? Concretely, there could be the following additional 
constants:

* Attribute::TARGET_INTERFACE
* Attribute::TARGET_ABSTRACT_CLASS
* Attribute::TARGET_TRAIT
* Attribute::TARGET_ENUM
* Attribute::TARGET_REGULAR_CLASS

and Attribute::TARGET_CLASS would be equal to the result of combining all of 
those with the `|` operator. 

—Claude 

—Claude 


Reply via email to