On Tue, 30 May 2023 at 18:48, Larry Garfield <la...@garfieldtech.com> wrote: > > > > -- > Larry Garfield > la...@garfieldtech.com > > On Tue, May 30, 2023, at 2:42 AM, Andreas Hennings wrote: > > Hello list, > > this proposal will be useful in combination with "Declaration-aware > > attributes" > > > > > > Problem > > ======== > > Currently, ReflectionMethod is not aware of the original class, if the > > method is declared in a parent class. > > Methods that are called during a discovery algorithm that need to > > process a method with its original class typically need two > > parameters: > > > > function processMethod(\ReflectionClass $class, \ReflectionMethod $method) > > {..} > > > > > > Proposal > > ======== > > Let a ReflectionMethod object keep track of the original class. > > Introduce a new method ReflectionMethod->getOriginalClass() to retrieve it. > > > > class B { > > function f($x) {} > > } > > class C extends B {} > > > > foreach ([ > > // There are different ways to get a reflection method object, all > > of them track the original class. > > new ReflectionMethod('C', 'f'), > > (new ReflectionClass('C'))->getMethod('f'), > > (new ReflectionMethod('C', > > 'f'))->getParameters()[0]->getDeclaringFunction(), > > ] as $rm) { > > // The following won't change: > > assert($rm->class === 'B'); > > assert($rm->getDeclaringClass()->getName() === 'B'); > > // New method: > > assert($rm->getOriginalClass()->getName() === 'C'); > > > > > > Alternatives > > ========== > > > > At first I thought we might introduce a new class like > > "VirtualReflectionMethod" which behaves as if the method was declared > > on the child class. But this is awkward. > > > > I think the ->getOriginalClass() is much simpler. > > > I would not be opposed to this. I don't know that I have any use cases for > it, but I'd be open to it.
You can search in your favourite project's /vendor/ directory for methods with two or more parameters that receive reflector objects. "function .*\(.*Reflection\w+ \$\w+, .?Reflection\w+ \$\w+" > > --Larry Garfield > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: https://www.php.net/unsub.php > -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: https://www.php.net/unsub.php