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