Re: Reflection*::hasAttribute()
| From: | Larry Garfield | Date: | Wed, 12 Jul 2023 18:04:07 +0000 |
| Subject: | Re: Reflection*::hasAttribute() | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-120797@lists.php.net to get a copy of this message | ||
On Wed, Jul 12, 2023, at 3:25 AM, Robin Chalas wrote:
> Hi internals,
>
> It is common attributes to be used as markers. Just like a marker
> interface with no methods, such attributes don’t have any parameter.
>
> Examples from Symfony:
> - #[Ignore] indicating that a property should be skipped in a
> serialization contextl
> - #[Exclude] telling the dependency injection container that a given
> class should be skipped from automatic service registration
>
>
> From Doctrine ORM:
> - #[Id] to tell which property of en entity class should be mapped as
> primary key
>
> Those are meant to opt in/out some behavior through detection only. But
> with the current API, such code needs to call
getAttributes()
> while
> it doesn't care about the returned ReflectionAttribute instances.
> Hence I’m wondering if we could add a hasAttribute() method
> to the
> reflectors that are targetable by attributes.
>
> Does that make sense?
> If it does, do I need to open an RFC for that feature or is a pull
> request be enough?
>
> Anyway, I’d be happy to work on the implementation as a first
> contribution to PHP.
> Looking forward to your feedback.
>
> Thanks.
> Robin
I think that would require an RFC.
To clarify, you're proposing to replace this:
count((new ReflectionClass(Beep::class))->getAttributes(Ignore::class)) == true
with
(new ReflectionClass(Beep::class))->hasAttribute(Ignore::class)
Right? That doesn't seem like a huge improvement.
--Larry Garfield