Re: Re: Trait aliasing syntax suggestions
| From: | Stefan Marr | Date: | Sat, 23 Feb 2008 20:40:23 +0000 |
| Subject: | Re: Re: Trait aliasing syntax suggestions | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-35761@lists.php.net to get a copy of this message | ||
Hi,
Christian Schneider schrieb:
I can see two use cases for aliasing: 1) An interface uses a different name than the trait implements. Not sure that's a software design problem trait should try to solve. Well, no, aliasing shouldn't be used to achieve this, think it would be better to add some glue code to a class to fulfill a interface, i.e. add a new method which will call the method from the trait if the name of the traits method does not fit to the interface. This will avoid confusion about the next point you've named. (for simple situations exclude and aliasing will do the job as well, yes)
2) There is a clash with an existing function in the class. Then one would have to both alias and exclude the trait function name anyway (which is the same as renaming) PLUS you'd have the problem of trait classes calling the 'wrong' functions again. In my opinion it is not a problem, but an opportunity.For a situation where two traits are implementing stuff which is very closely related and will be combined in a class you can do the following: trait A { public function handle($something) {
$this->process($something);} protected function process($something) {
// ...} } trait B { protected function process($something) {
// a method to process $something and be reused
// interdependently at several places
}
}
class Processor {
use A {
processA => process} use B {
processB => process} protected function process($something) {
// do combined processing using both traits methods
$this->processA($something);
$this->processB($something);
}
}
Kind Regards
Stefan