Hi,

On 5 April 2016 at 12:06, Michał Brzuchalski <mic...@brzuchalski.com> wrote:

> 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
>

Does this work for public properties as well?


> 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
>

I am aware of what `final` means in other languages, it just seems that
everyone then needs to translate back and forth from `final` to
`immutable`. In addition to that, `final` has different meaning in
inheritance (re-used keyword), so this adds to the confusion for people
unfamiliar with the feature.


> 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.
>

YW!


>
> 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)
>>>
>>
>>
>
As an additional question: how will this (eventually) play with typed
properties? I am aware that you cannot declare a class named `final`, but
that may change in future, so better factor it into any possible outcomes
of the RFC.

Cheers,

Marco Pivetta

http://twitter.com/Ocramius

http://ocramius.github.com/

Reply via email to