5.4a2 trait attribute name conflict resolution
| From: | Alex Howansky | Date: | Thu, 21 Jul 2011 16:13:02 +0000 |
| Subject: | 5.4a2 trait attribute name conflict resolution | ||
| Groups: | php.qa | ||
| Request: | Send a blank email to php-qa+get-65877@lists.php.net to get a copy of this message | ||
Hello folks,
I'm not sure if this issue belongs on the internals or qa list, so please let me know if I should post elsewhere.
I've just grabbed 5.4a2 to play with traits. I've found some behaviour which I'm not sure is a bug, an inconsistency, or a design decision.
Consider a trait and a class that implements it, but also overrides both a trait method and a trait attribute:
trait foo
{
public $zoo = 'foo::zoo';
public function bar()
{
echo "in foo::bar\n";
}
}
class baz
{
use foo;
public $zoo = 'baz::zoo';
public function bar()
{
echo "in baz::bar\n";
}
}
$obj = new baz();
$obj->bar();
echo $obj->zoo, "\n";
We get:
in baz::bar
foo::zoo
It seems this is not correct and that it should be:
in baz::bar
baz::zoo
The traits RFC pretty clearly states that if a class method conflicts with a trait method then the trait method will be ignored, which is what's happening, but it says nothing about what happens to attributes in that same condition. Is this a bug?
Thanks,
--
Alex Howansky