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/



Reply via email to