Re: [RFC] Property hooks, nee accessors
| From: | Hendra Gunawan | 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.