Re: [RFC] Property hooks, nee accessors

From: 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

« previous php.internals (#120299) next »