Re: [RFC] [Discussion] Readonly Classes
| From: | Larry Garfield | Date: | Mon, 22 Nov 2021 17:52:10 +0000 |
| Subject: | Re: [RFC] [Discussion] Readonly Classes | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-116477@lists.php.net to get a copy of this message | ||
On Mon, Nov 22, 2021, at 10:13 AM, Máté Kocsis wrote:
> Hi Internals,
>
> I'd like to propose adding support for readonly classes:
> https://wiki.php.net/rfc/readonly_classes
>
> The implementation heavily builds on the semantics of the already accepted
> readonly properties RFC (https://wiki.php.net/rfc/readonly_properties_v2),
> basically the only thing I had to implement in the PR are the following:
> - Any declared property of a readonly class is implicitly treated as
> readonly
> - Creation of dynamic properties is forbidden
>
> Readonly classes would make it easier to declare immutable(-alike) classes,
> especially if a class
> contains a lot of properties. As a side-effect, one could already opt out
> from dynamic properties
> completely, which won't really be possible for quite some time, even if
> https://wiki.php.net/rfc/deprecate_dynamic_properties passes.
>
> Regards:
> Máté
If I'm following, then this RFC is about 90% syntactic sugar for putting
readonly
on all properties, plus disabling dynamic properties. That's the long-and-short of it, yes?
Does disabling dynamic properties offer any other advantages as have been discussed otherwise
recently? (E.g., performance.)
Is there a way to opt a given property back OUT of being readonly, or if you have a readonly class
and need to add a single mutable property to it are you stuck adding readonly to all
existing properties first? (I'm not sure I'm suggesting having such a mechanism, mostly
just clarifying.)
It's interesting that this also provides a backdoor way to force all properties to be typed, as
a side effect. However... that also means you cannot mark a class readonly if any of its properties
are callables, since callables cannot be typed. (I guess you could use mixed and then docblock
callable, which is a bit fugly but not a problem introduced by this RFC.)
--Larry Garfield