On 29/12/2016 14:18, Marco Pivetta wrote:
On Thu, Dec 29, 2016 at 2:12 PM, Mathieu Rochette <math...@rochette.cc
<mailto:math...@rochette.cc>> wrote:
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
<https://dzone.com/articles/is-inheritance-dead>
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php
Just my 2 cents:
Too much magic syntactic sugar, whereas you are just saving very
little time while implementing a few method stubs that take..
yeah it's mostly syntactic sugar, I think it would encourage developer
to use this pattern instead of inheritance when appropriate.
I also think that most of the time using the decorator pattern helps
following the single responsibility principle
also, this would add one more benefit : methods that are not override
could probably be optimized by the PHP engine (avoid one userland proxy
call)
Yet, in order to achieve that, you added a huge amount of complexity
for all the tooling that relies on the AST, including PHP itself.
.
Marco Pivetta
http://twitter.com/Ocramius
http://ocramius.github.com/