Re: [RFC] Property accessors

From: Date: Tue, 04 May 2021 10:57:50 +0000
Subject: Re: [RFC] Property accessors
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-114266@lists.php.net to get a copy of this message
Hey NikiC,

On Tue, May 4, 2021, 12:34 Nikita Popov <nikita.ppv@gmail.com> wrote:

> Hi internals,
>
> I'd like to present an RFC for property accessors:
> https://wiki.php.net/rfc/property_accessors
>
> Property accessors are like __get() and __set(), but for a single property.
> They also support read-only properties and properties with asymmetric
> visibility (public read, private write) as a side-effect.
>
> The proposal is modeled after C#-style accessors (also used by Swift), and
> syntactically similar to the previous
> https://wiki.php.net/rfc/propertygetsetsyntax-v1.2
> proposal.
>
> While I put a lot of effort into both the proposal and the implementation,
> I've grown increasingly uncertain that this is the right direction for us
> to take. The proposal turned out to be significantly more complex than I
> originally anticipated (despite reducing the scope to only "get" and "set"
> accessors), and I'm sure there are some interactions I still haven't
> accounted for. I'm not convinced the value justifies the complexity.
>
> So, while I'm putting this up for discussion, it may be that I will not
> pursue landing it. I think a lot of the practical value of this accessors
> proposal would be captured by support for read-only (and/or private-write)
> properties. This has been discussed (and declined) in the past, but
> probably should be revisited.
>

I've skimmed the RFC: it will take a lot of testing to see how much this
impacts BC, but potentially a lot.

A few things that came up so far:

 * instead of allowing by-ref get declaration, can we just kill it here,
before it breeds again? I don't think I need to explain the woes of by-ref
to internals, but removing the ability to declare new accessors by-ref
would be a huge win for the engine and the language long-term.
 * what does an array cast of an object with accessors look like? I assume
only properties backed by storage will appear? (Yes, the array cast is
still the simplest/most useful pure API to inspect object state 😁)
 * what is the design decisions around same-visibility declarations causing
compile errors in inheritance scenarios? Those would make BC unnecessarily
complex, if a parent type declares a new accessor with the same name:
variance is understandable, but same visibility errors seem a bit too much

As for the rest: it needs more careful review.
So far, good work!

>


Thread (18 messages)

« previous php.internals (#114266) next »