Re: Trait aliasing syntax suggestions
| From: | Gregory Beaver | Date: | Fri, 22 Feb 2008 05:56:35 +0000 |
| Subject: | Re: Trait aliasing syntax suggestions | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-35719@lists.php.net to get a copy of this message | ||
Christian Schneider wrote:
> So my favourite solution (apart from allowing include in class
> definitions ;-)) would be
> trait foo { ... }
> ...
> class B
> {
> trait foo; # All functions from foo
> trait bar(a); # Only function a from bar
> trait qux(not b); # Everythign but function b
> trait quux(c as d); # Include c but rename it to d
> trait quuux(not b, c as d); # Combination of the above
> }
I could live with most of this as well.
"trait bar(a);" is really confusing - it looks like a function call and
is not nearly as clear as the other options. It's unlikely to be
necessary since a trait should really only have a few functions in it
anyways.
> Note: The inclusion of specific functions acts as if a "not *" (while *
> doesn't really need to be implemented neither for inclusion nor
> exclusion IMHO) was given first.
>
> Another detail: The implementation of the parser changes should still
> allow a class or function called "trait", i.e. "trait" should only be a
> keyword at specific positions in the source to avoid unneccesary BC
> breaks. The current patch has this BC problem.
This is not possible to implement, having tried to do a similar thing
for 'import' and 'namespace.' The reason is that we can encounter a
classname at any point thanks to "classname::whatever" syntax, so it
slows the lexer down a bit in that for every T_TRAIT we would have to
check to see if the next 2 characters are ::, and makes the lexer
uber-complicated. It's a big mess.
Greg