RE: [PHP-DEV] Extensions to traits
| From: | Jonathan Bond-Caron | Date: | Tue, 15 Feb 2011 14:35:55 +0000 |
| Subject: | RE: [PHP-DEV] Extensions to traits | ||
| References: | 1 2 3 4 5 6 7 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-51449@lists.php.net to get a copy of this message | ||
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.