Re: RFC: Locked Classes
| From: | Gabriel O | Date: | Sun, 10 Mar 2019 18:56:27 +0000 |
| Subject: | Re: RFC: Locked Classes | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-104623@lists.php.net to get a copy of this message | ||
Isn’t unset() currently only way to remove reference? This part is hence very problematic.
> On 10. Mar 2019, at 19:35, Rowan Collins <rowan.collins@gmail.com> wrote:
>
> Hi all,
>
> I'd like to present a new RFC for "locked classes": classes which restrict
> dynamically adding or removing properties from their instances.
>
> While it can be useful, the ability to set an object property which is not part of the class
> definition can also lead to subtle bugs. Banning this for all objects would be a significant and
> painful breaking change, so I propose instead the option to mark a particular class with a new
> keyword, "locked".
>
> An instance of a locked class behaves like any other object, except that:
>
> - Attempting to set a property on the instance which was not declared in the class (or
> inherited from one of its parent classes) will throw an error, and the instance will not be
> modified.
> - Attempting to read a property on the instance which was not declared (or inherited) will
> throw an error, rather than raising a Notice and evaluating to null.
> - Attempting to call unset() on any property of the instance will throw an error, and the
> instance will not be modified.
>
> Note that ECMAScript / JavaScript includes a similar feature, called "sealed
> objects". However, the proposed modifier applies to classes, and "sealed class" has a
> different meaning elsewhere (e.g. C#, Kotlin), so I've chosen "locked class" to avoid
> confusion.
>
> For further details and examples, please check the RFC at
> https://wiki.php.net/rfc/locked-classes and the tests in the draft
> implementation at https://github.com/php/php-src/pull/3931
>
> Regards,
>
> --
> Rowan Collins
> [IMSoP]
>
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>