> Le 13 sept. 2019 à 07:49, Michał Brzuchalski <michal.brzuchal...@gmail.com> a 
> écrit :
> 
> Hi Lynn,
> 
> czw., 12 wrz 2019 o 17:01 Lynn <kja...@gmail.com <mailto:kja...@gmail.com>> 
> 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

Reply via email to