Hi Marco, Ad. 1 it is posiible to redeclare in a sub-class final property as non-final, here is some gist presenting my current impl working like: https://gist.github.com/brzuchal/12ebda1efed59440a78ba43bff116728
Ad. 2. `final` means class variable (like static) or class instance property can not change their reference, it is impossible to replace zval in such property, in my opinion `immutable` is object behavior when using some methods you receive newly created (cloned) object which is changed exactly like `DateTimeImmutable` http://php.net/manual/en/datetimeimmutable.add.php Ad. 3 it would be awesome if there could be final variables in general, it would be quite stable if no one could change your variable, AFAIK zvals have IMMUTABLE flag which could be used, don't know it for sure I'm rather PHP dev than C there would be need some internals guru to ask if it's posiible. P.S. We've meet on PHPCon'15 in Poland, thanks for +1. Cheers, -- Michał Brzuchalski (aka brzuchal) 2016-04-05 11:13 GMT+02:00 Marco Pivetta <ocram...@gmail.com>: > Hi Michał, > > First of all: +1 to this: very useful for value objects! > > A few questions: > > * can you re-declare a final property in a sub-class, making it therefore > non-final? (I have reasons to do that, related with altering states via > mappers) > * do we want to use `final`, or `immutable` for these properties? `final` > seems to just be a confusing term here. > * is this feature portable to variables in general? I realize that adding > metadata to ZVals has huge performance implications, but it would be > interesting to do that for performance improvements further down the line > > Cheers, > > > Marco Pivetta > > http://twitter.com/Ocramius > > http://ocramius.github.com/ > > On 4 April 2016 at 19:53, Michał Brzuchalski <mic...@brzuchalski.com> > wrote: > >> Hey Internals, >> >> I'm new here. I've been wondering / working on adding final properties >> into >> PHP lang. >> >> This work started once I had the time to read the "Core Java for >> Impateient" by Cay S. Horstmann >> and found it very usefull to have final properties like Java. >> >> Those properties differ than `const` because they can be set at runtime - >> but only once in their lifetime. >> Such properties could be very usefull in Singletons, ValueObjects etc. >> impl >> like: >> >> class Money { >> public final $amount; >> public final $currency; >> public function __constructor($amount, $currency) { >> $this->amount = $amount; >> $this->currency = $currency; >> } >> } >> >> In above example there is even no need for getter because those properties >> are immutable through >> the final keyword, it means those properties cannot change their >> references >> just like in Java >> https://en.wikipedia.org/wiki/Final_(Java) >> >> I've already started some impl on own fork >> https://github.com/php/php-src/compare/master...brzuchal:final-properties >> I've got some basics in C programming, don't know yet if I can impl it >> complex. >> >> I was wondering if it is usefull in yours opinion or is it only my >> impression. >> >> I can provide an RFC if it sounds usefull and if I get Wiki karma >> >> Thanks >> -- >> Michał Brzuchalski (aka brzuchal) >> > >