Bug #69180 [Com]: Reflection does not honor trait conflict resolution / method aliasing
| From: | jpauli@php.net | 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