Что за тип в аргументе конструктора?
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)