Btw, I was not aware that there was already conversation on immutable classes.
2016-08-08 14:31 GMT+02:00 Silvio Marijić <marijic.sil...@gmail.com>: > I see your standpoint, but I think it could cause confusion because of > final classes. I think "immutable" is more suited here. > What I try to achieve is something similar like case classes in Scala. > > Best regards, > > 2016-08-08 13:16 GMT+02:00 Michał Brzuchalski <mic...@brzuchalski.com>: > >> Hi Silvio, >> >> Look into my talk about final properties https://marc.info/? >> t=145979255800003&r=1&w=2 maybe there would be something usefull. >> There is also talk about mutable and immutable properties and other class >> modifiers also about var and val. >> I'm not sure that it should be class midifier rather than proprty >> modifier keyword. >> >> regards, >> -- >> Michał Brzuchalski >> >> 2016-08-08 12:31 GMT+02:00 Silvio Marijić <marijic.sil...@gmail.com>: >> >>> 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 >>> >> >> >> >> -- >> pozdrawiam >> -- >> Michał Brzuchalski >> > > > > -- > Silvio Marijić > Software Engineer > 2e Systems > -- Silvio Marijić Software Engineer 2e Systems