Re: Trait aliasing syntax suggestions

From: 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

« previous php.internals (#35719) next »