Am 25.03.20 um 15:24 schrieb Larry Garfield:
> On Wed, Mar 25, 2020, at 5:57 AM, Nicolas Grekas wrote:
>> Máté suggested this syntax and it has my preference over the one you menton
>> Larry: doubling the visibility keyword could be enough to express
>> read+write access:
>>
>> public private $property; <= public read access, private write access
>
> In that syntax, you have to remember which one comes first. There's no
> indication for the casual reader why
>
> public private $property;
>
> and
>
> private public $property;
>
> are different. Plus, just looking at it, "wait, it's public and private?
> WTF? That doesn't even make sense."
>
> It also doesn't extend gracefully to property accessors. Whatever accessors
> do, if they ever get resolved, would conflict with that, and thus we'd have
> that many more weird combinations of property metadata that are incompatible.
>
> The whole point of the syntax I proposed for asymmetric visibility is that
> it's gracefully extensible, even if a little more verbose. (If we can find a
> syntax that is less verbose while still gracefully extensible, I am on board
> with that.)
What about the following syntax:
class X {
public read private write $property;
}
That would play nicely with accessors:
class Y {
public read getProp private write setProp Type $property;
// or this way around to make it clear which is the setter
// and which is the property type
public getProp read private setProp write Type $property;
private function getProp() : ?Type {}
private function setProp (Type $newValue) {}
}
It seems to me this would allow a clear syntax where you can selectively
add accessor method for reading or writing or both, you can reuse
existing setting methods when refactoring.
Only the isset/unset accessors are missing. I am not sure if they are
necessary: isset could be equivalent to ($obj->getProp() !== null) and
unset to setting null, but I have not thought this through yet.
Greets
Dennis
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php