Re: Re: [RFC] Constructor Property Promotion
| From: | Nikita Popov | Date: | Mon, 11 May 2020 16:21:36 +0000 |
| Subject: | Re: Re: [RFC] Constructor Property Promotion | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-110133@lists.php.net to get a copy of this message | ||
On Mon, May 11, 2020 at 5:26 PM Dan Ackroyd <Danack@basereality.com> wrote:
> On Mon, 11 May 2020 at 10:52, Nikita Popov <nikita.ppv@gmail.com> wrote:
> >
> > Please tell me if you have further concerns
>
> Question - as this is just sugar, presumably it doesn't add much
> complexity to the PHP engine?
>
Yes, the implementation complexity for this feature is minimal, as these
things go.
> Vague concern - because it's a novel syntax, I find it hard to read,
> particularly when there are comments* for the properties. Do you think
> I'll just get used to it, or is it likely to be an ongoing issue?
>
Well, I can't really answer this with confidence, but given the number of
people who told me how much they love this feature in TypeScript, I would
hazard that you would indeed get used to it.
> Also, in five years time, if we have structs**, people will be
> wondering why we bothered with this. But I think it does make life
> easier for developers in the meantime.
>
When we discussed this topic in chat last time, I got the feeling that the
rough consensus was that introducing "structs" as a feature distinct from
classes is a bad idea, and we should instead try to make relevant features
available for classes. Constructor promotion is one of those :)
> class UrlToPdfProcessor
> {
> public function __construct(
> // The full url to reach the instance of chrome running in
> headless mode.
> public string $chromeUrl,
>
> // A path to a directory where the output PDF will be written to.
> // It must already exist and be writeable by the process running
> // the PDF processor.
> public string $tmpPath,
>
> // The internal domain name for the site to be rendered.
> // The domain name should not contain either protocol or path
> // components
> string $internalDomain
> ) {
> }
> }
>
As suggested in
https://wiki.php.net/rfc/constructor_promotion#coding_style_considerations,
my recommendation is to use normal @param annotations for constructor
arguments, as we do now. While interleaving parameters and comments is
certainly possible (already), it's certainly not common style, and I don't
think it will become common style with constructor promotion.
Regards,
Nikita