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