RE: [PHP-DEV] Traits
| From: | Jonathan Bond-Caron | Date: | Mon, 12 Apr 2010 14:11:51 +0000 |
| Subject: | RE: [PHP-DEV] Traits | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-47892@lists.php.net to get a copy of this message | ||
On Mon Apr 12 05:16 AM, Stefan Marr wrote:
>
> On 12 Apr 2010, at 10:39, Lukas Kahwe Smith wrote:
> > On 12.04.2010, at 10:34, Derick Rethans wrote:
> >> Hi!
> >>
> But just as a quick response, without aliasing, there would be no way
> to use a conflicting method from a trait.
> On first sight, that is not a really good thing.
Hi Stefan, is it possible to have renaming and aliasing?
Some context, say we have:
trait Something {
function renameIssue() {
$method = 'call';
$this->$method();
call_user_func(array($this, $method));
}
function call () {
echo "a";
}
}
class Foo {
use Something {
function call() as call2();
}
}
With renaming:
$f = new Foo;
$f->call2(); // a
$f->renameIssue(); // call() method does not exist
With aliasing:
$f = new Foo;
$f->call(); // a
$f->call2(); // a
$f->renameIssue(); // a
While aliasing prevents the error, the syntax could re-use the 'clone'
keyword:
class Foo {
use Something {
function call() clone call2();
}
}
So we'd have both behaviors:
class Foo {
use Something {
function call() as call2();
function call() clone call3();
}
}
We have call(), call2(), call3()
class Foo {
use Something {
function call() as call2();
}
}
We have call2()
Other than that, the traits proposal still feels incomplete compared to
grafts since from Stefan's research: "the lack of state means that virtually
all traits are incomplete"
It's still a great step if the current proposal (methods only) gets
committed.