Re: [RFC] Property hooks, nee accessors

From: Date: Sun, 14 May 2023 23:41:12 +0000
Subject: Re: [RFC] Property hooks, nee accessors
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-120276@lists.php.net to get a copy of this message
On Tue, May 9, 2023 at 4:38 AM Larry Garfield <larry@garfieldtech.com> wrote: > > Ilija Tovilo and I would like to offer another RFC for your consideration.. It's been a > while in coming, and we've evolved the design quite a bit just in the last week so if you saw > an earlier draft of it in the past few months, I would encourage you to read it over again to make > sure we're all on the same page. I'm actually pretty happy with where it ended up, even > if it's not the original design. This approach eliminates several hard-to-implement edge cases > while still providing a lot of functionality in one package. > > https://wiki.php.net/rfc/property-hooks > > -- > Larry Garfield > larry@garfieldtech.com > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: https://www.php.net/unsub.php > Hi Larry. ``` public string $fullName => $this->first . " " . $this->last; ``` 1. Suppose that I forgot to declare ``$this->first``. Based on the "deprecate dynamic properties" proposal, will I get an error/warning? 2. The shorthand notations supported (the shortest one) creates impaired syntax, and not pretty to look at for constructor property promotion. ``` public function __construct( public string $prop1 => strtoupper($this->_prop1), public string $prop2 {set => $field = strtolower($value);}, ){} ``` My suggestion is: use get/set keyword immediately after property name/default value rather than "=>" or "{" without losing multiline statements. ``` public function __construct( public string $prop1 get => strtoupper($this->_prop1), public string $prop2 set => $field = strtolower($value), public string $prop3 get { $temp = strtoupper($this->_prop1); return substr($temp, 0, 10) . '...'; } public string $prop4 set { $temp = strtolower($value); $field = substr($temp, 0, 10); } ){} ``` This syntax is aligned with a single statement if/for/foreach.

« previous php.internals (#120276) next »