Что за тип в аргументе конструктора?

public function __construct(\DateTimeImmutable ...$dates) 

что за запись такая? и с какой версии php работает?

по логите это типизированный (из DateTimeImmutable ) массив.

но если вызвать конструктор так:

$new = new Entity([new \DateTimeImmutable]);

то ошибка несоответствия типов.


Ответы (1 шт):

Автор решения: Dmitrii Sedov

Правильно выводит, потому что на вход должен приходить объект, а приходит массив. Такая запись эквивалентна этой (пример):

function myFunc(int ...$ints) {
    var_dump($ints);
}

myFunc(1, 2, 3, 4);

То есть, все аргументы функции будут в переменной $ints в виде массива, но должны иметь тип integer

В вашем случае:

$new = new Entity(new \DateTimeImmutable, new \DateTimeImmutable, new \DateTimeImmutable);

внутри функции будет доступен массив $dates значения которого объекты класса DateTimeImmutable

Данная запись называется уточнение типа funcName(\DateTimeImmutable $var)

→ Ссылка