On Sun Feb 13 05:15 AM, André Rømcke wrote:
> >
> > I have now made an RFC based on the most recent discussions:
> >
> > http://wiki.php.net/rfc/traitsmodifications
> >
> 
> I think it would sometimes be desirable to allow this, for instance 
> when a trait has been updated in a framework to adapt to what has 
> become common practice in classes that uses it in the wild.
> ( I assume you already get error if function signature is different 
> like in inheritance? )
> 
> So to allow both cases, what about letting people use the final 
> keyword on functions to signal functions that cannot be re declared 
> without alias. Or better, add a new keyword since final should mean 
> final.
> 

I find the implementation in trunk convenient, traits aren't meant to replace 
inheritance & ~polymorphism.

The 'final' keyword currently means nothing to the class:
trait Foo {
        final static function test() {
                return 'Test';
        }
}

class A {
        use Foo;
        static function test() {
                return 'Test2';
        }
}

echo A::test(); // returns 'Test2' in trunk

That might seem odd but it's not inheritance.
There is no error if the class method signature is different from a trait.
I'm comfortable with 'the class always wins', not really sure if should I be 
thinking differently...

It makes a trait somewhat fragile but that's part of the design vs. grafts. 



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

Reply via email to