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.coll...@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
> 


--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to