Skip to content

Make objects unpackable by default  #16038

@MrMeshok

Description

@MrMeshok

Description

Right now if you try to unpack an object, you will get an error: Only arrays and Traversables can be unpacked.
But if you just foreach an object, it works, and you can iterate over each public property, so I think unpacking should work on all objects and return public properties. This would be especially nice when working with stdClass or DTO.
And take a look at an example  where objects share some properties

readonly class Balance
{
    public function __construct(
        public float $debt,
        public float $credit,
    ) {}
}

readonly class Profile
{
    public function __construct(
        public string $name,
        public float $debt,
        public float $credit,
    ) {}
}

$balance = new Balance(
    debt: 2,
    credit: 1,
);

$profile = new Profile(
    ...$balance,
    name: 'Name',
);

Right now workaround is to use ...(array) $balance or implement IteratorAggregate on classes

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions