Hey there,

Looking at how to achieve “readonly input object” now a few things come in
my mind:
 * Write a readonly class in first place, assuming it’s not a class from a
package you cannot or don’t want to update
 * Clone the object
 * Use a new immutable DTO for data transfer
 * Use stateless “services” (DI-ed)
 * Use static code analysers
 * Have conversations in your team

Having this in mind, such feature looks more or less as syntax sugar with
not much value. Nevertheless, I like it :)

Hope to see other comments.

Regards,
Dimitar




On Sat, 6 May 2023 at 13:55, Olle Härstedt <olleharst...@gmail.com> wrote:

> Heyo internalitos,
>
> I was thinking of having the possibility to use `readonly` (or any
> other keyword) to make a function argument behave as if it was a
> readonly object.
>
>     class Point
>     {
>       public int $x;
>       public int $y;
>     }
>     function doThing(readonly Point $p)
>     {
>       $p->x = 10;  // Not allowed
>     }
>
> In C# it's called in/out/ref types:
> https://www.pluralsight.com/guides/csharp-in-out-ref-parameters
>
> The main use-case is to not give away more access than you have to,
> and being able to state your intent in the function signature.
>
> Another alternative would be to allow properties in interfaces, and
> then define a readonly-like interface:
>
>     interface ReadonlyPoint
>     {
>       public readonly int $x;
>       public readonly int $y;
>     }
>     function doThing(ReadonlyPoint $p)
>     {
>       $p->x = 10;  // Not allowed
>     }
>
> No idea about practical feasability.
>
> Since arrays are value types, they're not really relevant for this
> suggestion. Same goes for string, int, etc.
>
> Regards
> Olle
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: https://www.php.net/unsub.php
>
>

Reply via email to