Re: [RFC] Property hooks, nee accessors
| From: | Larry Garfield | Date: | Mon, 15 May 2023 18:49:10 +0000 |
| Subject: | Re: [RFC] Property hooks, nee accessors | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-120299@lists.php.net to get a copy of this message | ||
On Mon, May 15, 2023, at 8:32 AM, Lynn wrote:
> It's starting to get crowded in object constructors. The following example
> is so much more readable and maintainable imo. Would it be possible to
> still add the quick assignment as a language feature? I'm personally not
> happy having property definitions in both the class body _and_ the
> constructor signature.
>
> ```php
> class User {
> private string $first;
> private string $last;
> public string $fullName {
> get => $this->first . ' ' . $this->last;
> set => [$this->first, $this->last] = explode(' ', $value, 2);
> }
>
> public function __construct($this->fullName) {}
> }
>
> // vs
>
> class User {
> private string $first;
> private string $last;
>
> public function __construct(
> public string $fullName {
> get => $this->first . ' ' . $this->last;
> set => [$this->first, $this->last] = explode(' ', $value, 2);
> }
> ) {}
> }
>
> // or
>
> class User {
> private string $first;
> private string $last;
> public string $fullName {
> get => $this->first . ' ' . $this->last;
> set => [$this->first, $this->last] = explode(' ', $value, 2);
> }
>
> public function __construct(string $fullName)
> {
> $this->fullName = $fullName;
> }
> }
The last version skips constructor promotion entirely, so will absolutely work. For this case,
that's frankly the best approach, since you're right, the constructor gets rather messy
otherwise.
Changing the syntax and semantics for CPP itself (as in the first code block above) is considerably
out of scope for this RFC. I recall someone pointing out why double-declaring the property would
cause problems, but I forget the reason. In any case, another promotion syntax would be a topic for
another RFC. I don't recall off hand the reasons Nikita had for choosing the syntax that ended
up being used.
--Larry Garfield