> Le 13 sept. 2019 à 07:49, Michał Brzuchalski <[email protected]> a
> écrit :
>
> Hi Lynn,
>
> czw., 12 wrz 2019 o 17:01 Lynn <[email protected] <mailto:[email protected]>>
> napisał(a):
>
>> Heya,
>>
>> What's the added benefit of this compared to implementing a constructor?
>>
>> The part I like is that this can be used to replace stdClass/structured
>> arrays. Perhaps something like this would nice to have in PHP:
>>
>> ```
>> $people = [];
>>
>> foreach ($peopleFromDatabase as [$id, $username, $name]) {
>> $people[] = {
>> Uuid id => $id,
>> string username => $username,
>> string name => $name,
>> };
>> // and possible automatic assignment:
>> $people[] = {Uuid $id, string $username, string $name};
>> }
>> ```
>>
>
> Removing stdClass for instantiation and initialization of simple objects is
> one of a future scope proposal.
>
> This RFC tries to address instantiation and initialization boilerplate
> reduction with a syntax which would
> not be restricted to stdClass only.
>
> Although it's not a game-changer, simple addition to the language which
> reduces boilerplate when dealing
> with objects which don't need complex constructors like for eg. DTO objects.
>
As for `stdClass`, PHP has already a syntax:
$baz = "baz";
$obj = (object) [
"foo" => "bar",
$baz => true
];
For other type of objects, that could be done with a simple helper function
$customer = object_assign(new Customer, [
"id" => 123,
"name" => "John Doe",
]);
where:
function object_assign(object $obj, iterable $data): object {
foreach ($data as $key => $value) {
$obj->$key = $value;
}
return $obj;
}
That said, I generally use arrays rather than DTO objects or such, so that I
can’t speak from experience.
—Claude