I see Reflection is still todo;  should there be a similar escape hatch to 
ReflectionMethod::setAccessible()?

This would allow things like: 
https://gist.github.com/fredemmott/01ad55c0c03c8d7ba62bbd6e9fb23686 
<https://gist.github.com/fredemmott/01ad55c0c03c8d7ba62bbd6e9fb23686> 
(apologies for the hack-like syntax) - the ‘every property must be a 
constructor parameter’ approach in the RFC seems like it would rapidly become 
unwieldy for classes with a large number of properties.

Regards,
 - Fred
     

On Aug 8, 2016, at 3:31 AM, Silvio Marijić <marijic.sil...@gmail.com> wrote:
> 
> Hi,
> 
> I would need your help with one idea. I'm working on one RFC that I'm would
> like to submit. Idea is that after you initialize object eg. after
> constructor returns, object would be locked, and you wouldn't be able to
> change properties on that object anymore. It would like this:
> 
> <?php
> 
> immutable class Email {
>>     public $email;
>>     public function __construct($email){
>>         $this->email = $email;
>>     }
>> }
>> $email = new Email("exam...@email.com");
> 
> 
> 
> After instance of class is created, object is "frozen" so call like this
> 
> $email->email = "n...@email.com";
> 
> 
> Would result in error.
> 
> I have already implementation up to certain degree, but I need one advice
> from more experienced developers. Where is the place where I could put
> logic to lock object after the constructor has finished? Maybe in zend vm
> on ZEND_NEW token?
> 
> Some constraints are needed:
> 
>   1. Child class that extends immutable class must be defined as immutable
>   also.
>   2. If property on immutable class contains object, it must be instance
>   of immutable class.
>   3. You can not have immutability per property, it either whole class or
>   none.
> 
> Thank you all in advance.
> 
> -- 
> Silvio Marijić
> Software Engineer
> 2e Systems

Reply via email to