0

I want to call a method like that:

public function to(Address|string ...$addresses) {}

I can call it with $obj->to("my-address"). But, when I want to give a list of address, I'm using:

$myList = [ "address-1", "address-2" ];
$obj->to($myList);

But I get this error: must be of type Symfony\Component\Mime\Address|string, array given

Even if it's with [] :

enter image description here

How can I use array as parameters?

Elikill58
  • 4,050
  • 24
  • 23
  • 45

2 Answers2

1

You're using ... to take every argument. You should spread your array before passing it to to():

$myList = [ "address-1", "address-2" ];
$obj->to(...$myList);
Ar Rakin
  • 534
  • 3
  • 15
1

You need to add ... in the call to the function as well. That syntax has two complementary meanings, both documented on the same page of the manual.

  • When used in the declaration of the function, as you have, it means "collect separate arguments (which must each be of the correct type, if specified) into an array"
  • When used in calling a function, it means "pass the items of this array as separate arguments"

So:

$myList = [ "address-1", "address-2" ];
$obj->to(...$myList);

Means the same as:

$obj->to("address-1", "address-2");

And then the ...$addresses in the function declaration makes that back into an array, checking that each item matches the type declaration Address|string.

IMSoP
  • 89,526
  • 13
  • 117
  • 169