[prev in list] [next in list] [prev in thread] [next in thread]
List: php-internals
Subject: Re: [PHP-DEV] [RFC] Property hooks, nee accessors
From: "Larry Garfield" <larry () garfieldtech ! com>
Date: 2023-05-30 17:14:53
Message-ID: 331a26ff-a11f-4a7e-b75b-5d588069aa5a () app ! fastmail ! com
[Download RAW message or body]
--
Larry Garfield
larry@garfieldtech.com
On Mon, May 29, 2023, at 8:28 PM, Claude Pache wrote:
> > Le 8 mai 2023 à 23:38, Larry Garfield <larry@garfieldtech.com> a écrit :
> >
> > Ilija Tovilo and I would like to offer another RFC for your consideration. It's \
> > been a while in coming, and we've evolved the design quite a bit just in the last \
> > week so if you saw an earlier draft of it in the past few months, I would \
> > encourage you to read it over again to make sure we're all on the same page. I'm \
> > actually pretty happy with where it ended up, even if it's not the original \
> > design. This approach eliminates several hard-to-implement edge cases while \
> > still providing a lot of functionality in one package.
> > https://wiki.php.net/rfc/property-hooks
> >
>
> Hi,
>
> If I understand correctly, given:
>
> <?php
>
> class C {
>
> public int $someInt;
>
> public float $someFloat;
>
> public int $someIntWithHook {
> get => $field;
> set => $field = $value;
> }
>
> public float $someFloatWithHook {
> get => $field;
> set => $field = $value;
> }
>
> }
> ?>
>
> we have:
>
> <?php
> $obj = new C;
> var_dump($obj->someInt = 42.0); // int(42)
> var_dump($obj->someFloat = 42); // float(42)
> ?>
>
> but:
>
> <?php
> $obj = new C;
> var_dump($obj->someIntWithHook = 42.0); // float(42)
> var_dump($obj->someFloatWithHook = 42); // int(42)
> ?>
>
> If I am correct, it means that the "This also implies that adding a set
> hook to a property cannot change the result of the = operator"
> statement is a bit too optimistic.
We looked into this a bit; it's correct if you're in weak mode. In strict mode, it \
applies only to $o->float = $anInt, as that's the only legal type coercion. Still, \
you're right that it's not quite "cannot change", so I've adjusted the wording to \
better describe the edge cases. The behavior is still the same as __set(), so we \
don't see a need to change it further.
Thanks for the catch.
--Larry Garfield
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic