Re: [IDEA for RFC] class_uses and optionally returning traits for parent classes
| From: | Robert Humphries | Date: | Wed, 25 Mar 2026 11:53:23 +0000 |
| Subject: | Re: [IDEA for RFC] class_uses and optionally returning traits for parent classes | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-130448@lists.php.net to get a copy of this message | ||
>> it isn't documented why it only returns traits on the current class
> The reason is given here:
> https://bugs.php.net/bug.php?id=61554#1333085728 :
>> Traits are outside the inheritance system: the
>> parent class is effectively defined by the composition of its own
>> methods/properties and any traits it uses, so trait usage is not actually
>> inherited. Furthermore, it doesn't really make sense to reflect trait usage down
>> the class hierarchy because the same trait may be used more than once within a
>> class hierarchy.
Thanks Claude, that is useful to note, when I initially looked, I was
looking for
class_uses in particular as opposed to getTraits from
Reflection.
I am not sure I agree with the reasoning though. If you are using
class_uses in the first place to check for a trait's presence, then
I can't find any difference in use cases for if a trait is defined at
the current level or parent level. Although the trait is not
inherited, the _effect_ of the trait is.
(While you might get differences in behaviour if using multiple traits
and specifying insteadof to resolve conflicts, what functions from
the trait that were used/not used are not provided by class_uses, so
the same trait being used more than once doesn't affect any changes to
the function other than needing to dedupe the list)
~ Robert