Re: [RFC] Readonly properties

From: Date: Sat, 05 Jun 2021 09:47:35 +0000
Subject: Re: [RFC] Readonly properties
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-114734@lists.php.net to get a copy of this message
Le 04/06/2021 à 17:19, Nikita Popov a écrit :
Hi internals, I'd like to open the discussion on readonly properties: https://wiki.php.net/rfc/readonly_properties_v2 This proposal is similar to the https://wiki.php.net/rfc/write_once_properties RFC that has been declined previously. One significant difference is that the new RFC limits the scope of initializing assignments. I think a key mistake of the previous RFC was the confusing "write-once" framing, which is both technically correct and quite irrelevant. Please see the rationale section ( https://wiki.php.net/rfc/readonly_properties_v2#rationale) for how this proposal relates to other RFCs and alternatives. Regards, Nikita Hello,
If I understood it well you count assignments, one note thought after re-reading once again, you state:
This variant is not allowed, as the initializing assignment occurs from outside the class:
Does this mean it'll prevent programmatic object hydration using the scope-stealing closure pattern ? Such as: <?php class SomeClass {
    public readonly int $foo;
} $bar = 12; $object = (new \ReflectionClass('SomeClass'))->newInstanceWithoutConstructor(); (\Closure::bind(
    function (SomeClass $object) ($bar
        $object->foo = $bar;
    },
    null,
    SomeClass::class
))($object); ?> I know this is a weird stuff to do I wouldn't advise to others myself, but some hydration libraries such as ocramius/generated-hydrator do leverage this mechanism to hydrate objects, and I sometime do it myself in business code, sporadically, to hydrate objects from database without needing to define a constructor for those value objects. If it does prevent such code, will there be some additional mechanism to create value objects with readonly properties without constructor ? Such as an JavaScript object-like object instanciation mechanism ? <?php class SomeClass {
    public readonly int $foo;
} $bar = 12; $object = {
    foo: $bar,
}; ?> I know this goes far outside of this RFC's own scope, but maybe this is the occasion to open a discussion about this, this would play well with readonly properties and various serializers or hydrators libraries. Regards, -- Pierre

Thread (40 messages)

« previous php.internals (#114734) next »