Bug #69180 [Com]: Reflection does not honor trait conflict resolution / method aliasing

From: Date: Tue, 02 Jun 2015 13:35:18 +0000
Subject: Bug #69180 [Com]: Reflection does not honor trait conflict resolution / method aliasing
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-193069@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=69180&edit=1 ID: 69180 Comment by: jpauli@php.net Reported by: sebastian@php.net Summary: Reflection does not honor trait conflict resolution / method aliasing Status: Open Type: Bug Package: Reflection related Operating System: Irrelevant PHP Version: 5.6.6 Block user comment: N Private report: N New Comment: mmmm not easy. This is because trait aliases are only resolved in a one-depth dimension. If class Foo uses trait T1, class Foo will be assigned T1 as trait_aliases. But if then T1 uses T2, Foo will not be assigned T2 as one of its own trait_aliases, T2 will be however a trait_alias of T1, as expected. Reflection uses trait_aliases to get method names, thus this bug report. This ugly patch (https://github.com/jpauli/php-src/tree/69180) changes that, and uses the hash_key that owns the resolved name directly, however, this is case insensitive, and thus breaks another test. This is also a quick and dirty patch, I think we should rework the traits deeply, but that's not an easy task knowing how dirty they've been implemented :-( https://github.com/jpauli/php-src/tree/69180 Previous Comments: ------------------------------------------------------------------------ [2015-03-04 08:05:17] sebastian@php.net Description: ------------ The Reflection API does not honor the method aliasing / conflict resolution mechanism for traits. Test script: --------------- <?php trait T1 { public function foo() { } } trait T2 { use T1 { foo as bar; } public function foo() { } } class C { use T2; } $class = new ReflectionClass('C'); foreach ($class->getMethods() as $method) { var_dump($method->getName()); } Expected result: ---------------- string(3) "bar" string(3) "foo" Actual result: -------------- string(3) "foo" string(3) "foo" ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=69180&edit=1

« previous php.bugs (#193069) next »