>From point of immutability of object, there is no difference if property is
defined or not, so you are correct, last line in your code will throw an
error.

2016-09-02 11:06 GMT+02:00 Mathieu Rochette <math...@texthtml.net>:

> thank you for the clarification, more questions inline :)
>
>
> On 09/02/2016 04:23 AM, Michał Brzuchalski wrote:
> > Firstly, thanks for your interest.
> > My answers are inline.
> >
> > 2016-09-01 23:48 GMT+02:00 Mathieu Rochette <math...@texthtml.net>:
> >
> >>
> >> On 09/01/2016 09:12 PM, Fleshgrinder wrote:
> >>> On 9/1/2016 3:49 PM, Silvio Marijić wrote:
> >>>> Hi Andre,
> >>>>
> >>>> Here is RFC https://wiki.php.net/rfc/immutability and you have link
> to
> >>>> implementation github. Any suggestions and feedback are more then
> >> welcome.
> >>>> Best,
> >>>> Silvio
> >>>>
> >>> Hi Silvio,
> >>>
> >>> very nice work you guys did here! :)
> >> indeed! nice to see this going forward
> >>> Abstract classes are not mentioned at all in the RFC. However, there is
> >>> a test case from which it is clear that abstract classes cannot be
> >>> immutable. Are there any reasons for this restrictions?
> >>>
> >>> What about array and resource values? Not mentioned in the RFC.
> >> I guess they are not authorized in immutable classes as they are not
> >> immutable themselves, but I think it could be explained
> >>
> > Yes that could be explained, they are actually not authorized because we
> > cannot guarantee developer will use them internally only. So in case this
> > property will interact with immutable object state should be also
> immutable.
> >
> >
> >>> The fact that cloning is not possible should also be extended in the
> >>> RFC. I mean, it's clear to me but maybe not to others. Remember that
> the
> >>> RFC is the main source of information for the feature (e.g. to generate
> >>> documentation).
> >> agreed, I don't get why it's not possible :/
> > I think any RFC enchancements in this area is welcome.
> >
> >
> >>> Why the restrictions that all properties of an immutable class that
> take
> >>> objects must be immutable too? It's clear why an immutable property
> must
> >>> contain an immutable class but the inheritance from the class to the
> >>> properties is not consistent with how things work. An immutable class
> >>> might want to contain an internal cache (e.g. flyweight pattern).
> >>>
> >>>   immutable final class Flyweight {
> >>>
> >>>     private static $instances = [];
> >>>
> >>>     public immutable $value;
> >>>
> >>>     private function __construct($value) {
> >>>       $this->value = $value;
> >>>     }
> >>>
> >>>     public static function ENUM_ORD() {
> >>>       if (isset(self::$instances[1]) === false) {
> >>>         self::$instances[1] = new self(1);
> >>>       }
> >>>
> >>>       return self::$instances[1];
> >>>     }
> >>>
> >>>   }
> >>>
> >>>   $o1 = Flyweight::ENUM_ORD();
> >>>   $o2 = Flyweight::ENUM_ORD();
> >>>
> >>>   var_dump($o1 === $o2); // bool(true)
> >> I can understand the usecase, but then, how could  the language ensure
> >> the class is immutable
> >
> > It cannot be ensured while non-immutable property will exists in
> immutable
> > object.
> >
> >
> >> side note: what about access (read & write) to undefined properties ?
> >>
> > You mean properties which are declared and default null and never changed
> > during object instantiation?
> I meant properties which are not declared at all, eg:
>
> class foo {
> }
> $f = new foo();
> var_dump($f->bar);
> $f->bar = 'taz';
>
> I expect it to print null and throw an error on write access, but it's
> just to be sure. actually I guest it should be the same than with
> declared with default null and never changed during object instantiation
>
> >
> >
> >>> Note that we could add the restriction that an immutable class that
> >>> should be used in a threading context must contain only immutable
> >>> properties in the future when the need arises. However, for now I do
> not
> >>> see the need to inherit the modifier from the class to its properties
> >>> and I see use cases where the developer wants more control.
> > We agreed that it would be best for ensuring the object state is
> immutable
> > (that implies it can be deeply frozen for writes as deep as all his
> > properties
> > and properties object properties etc.)
> >
> >
> >>> The test cases cover the most stuff but not everything and could be
> >>> extended. There are other things with the PR but I will check it out
> and
> >>> create a PR against your branch with that so you can review it. (Might
> >>> take a while so bare with me.)
> >>>
> >> The RFC contains several grammatical issues. I could help you with that
> >>> too if you want.
> >>>
> > As abowe any RFC enchancements are welcome :)
> >
> >
> >>> There is a lot of diff noise in the ext/tokenizer/tokenizer_data.c
> file.
> >>>
> >> --
> >> Mathieu Rochette
> >>
> >>
> >> --
> >> PHP Internals - PHP Runtime Development Mailing List
> >> To unsubscribe, visit: http://www.php.net/unsub.php
> >>
> >>
> >
>
> --
> Mathieu Rochette
>
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>


-- 
Silvio Marijić
Software Engineer
2e Systems

Reply via email to