Hello internals,
I find that using the decorator pattern is very verbose and maybe
something could be done about that,
an article[1] I saw proposed a "decorates" keyword to solves this, here
is how it might look like in PHP:
interface Foo {
public bar();
public taz();
}
class EchoFooBar decorates Foo {
public function bar() {
$this->logger->debug("foo bar");
return $this->decorated->bar();
}
}
class LoggedFooTaz decorates Foo {
private $logger;
public function __construct(Foo $decorated, Logger $logger) {
$this->logger = $logger;
$this->decorated = $decorated;
}
public function taz() {
$this->logger->debug("foo taz");
return $this->decorated->taz();
}
}
* the constructor is optional and default to take the first argument and
put it in $decorated
* if the constructor is provided PHP check that $decorated is set and
implements the decorated interface or class
* all public methods not overridden are automatically proxied to the
decorated object
There is at least a few different ways to go about this, the previous
example was just to give you a preview of what it could be. If there is
interest I'd like to write an RFC for this :)
What do you think about this ?
thank you
[1] https://dzone.com/articles/is-inheritance-dead
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php