On 22 July 2011 16:17, Alex Howansky <alex.howan...@gmail.com> wrote:
>
> Hello folks,
>
> 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
>
>

In my limited understanding, a trait is sort of composited at compile
time (ish). As properties are dynamic (ish), they will overwrite. Just
like an inherited class will overwrite public properties in their
parent class.

-- 
Richard Quadling
Twitter : EE : Zend : PHPDoc
@RQuadling : e-e.com/M_248814.html : bit.ly/9O8vFY : bit.ly/lFnVea

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to