Re: Constructor parent property promotion

From: Date: Mon, 17 Aug 2020 22:11:37 +0000
Subject: Re: Constructor parent property promotion
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-111602@lists.php.net to get a copy of this message
    "Lokrain" lokrain@gmail.com – August 17, 2020 7:14 PM   >   > > On Mon, 17 Aug 2020 at 19:46, Mathieu Rochette <mathieu@rochette.cc> > wrote: >   > >> Hi, >> >>   >> >> I’m writing a message here to receive feedback on a two ideas related to >> class constructors before going more in details with an RFC. I hope >> this is >> appropriate behavior for this list >> >>   >> >> With the Constructor Property Promotion accepted in PHP 8, there’s a lot >> less of boilerplate when writing class constructors. I’m suggesting two >> additional ways of making thing even easier and I hope, readable. >> >>   >> >> First: I’d like to be able to automatically transfer a constructor >> property to its parent constructor. I’m thinking of something like that: >> >>   >> >> ```php >> >> class MyCommand extends Command >> >> { >> >>    public function __construct( >> >>        private Connection $connection, > > Why do you use visibility modifier inside here? This the new PHP 8 feature brought by the Constructor Property Promotion RFC: https://wiki.php.net/rfc/constructor_promotion >>        parent string $name, >> >>    ) { > > C# has something like this ) : base($name) > >>    } >> >> } >> >> ``` >> >>   >> >> This would be the equivalent of : >> >>   >> >> ```php >> >> class MyCommand extends Command >> >> { >> >>    public function __construct( >> >>        private Connection $connection, >> >>        string $name, >> >>    ) { >> >>        parent::__construct($name); >> >>    } >> >> } >> >> ``` >> >>   >> >> The second idea is to make the constructor body optional, the first >> example >> would now be: >> >>   >> >> ```php >> >> class MyCommand extends Command >> >> { >> >>    public function __construct( >> >>        private Connection $connection, >> >>        parent string $name, >> >>    ) >> >> } >> >> ``` >> >>   >> >> This would call the parent constructor automatically even if no "parent" >> parameter are present. I could even see this enforced by linter to avoid >> having logic in the constructors. >> >>   >> >> If there is interest I’d like to try writing an rfc and implement it. I >> have not much knowledge of the php-src code but I hope this is a small >> enough change that I’ll be able to tackle. So, at that time if someone is >> interested in mentoring this little project I’d appreciate it :) >> >>   >> >>   >> >> regards, >> >>   >> >> Mathieu > >   -- Mathieu Rochette

« previous php.internals (#111602) next »