On Sat, Jun 5, 2021, 11:47 Pierre <pierre-...@processus.org> wrote:

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


Sounds like a revelant subject to be raised, indeed. But I honestly hope
that this awkward hack will not prevent us from getting read-only
attributes.

>

Reply via email to