Конструктор класса Laravel должен принимать коллекцию моделей

Конструктор класса Laravel должен принимать коллекцию моделей

12.01.2020 03:19:23 Просмотров 45 Источник

Есть ли способ для конструктора класса проверить, что входной параметр является коллекцией определенных объектов?

Я знаю, что могу это сделать:

public function __construct(Collection $input)

Но можно ли заставить его быть совокупностью заданных объектов (моделей)? Что-то вроде:

public function __construct(Collection<User> $input)
У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/59703727/laravel-class-constructor-must-accept-collection-of-models#comment105560187_59703727
АФАИК это невозможно. Один из способов сделать это-проверить содержимое коллекции внутри конструктора (или создать метод, выполняющий проверку и вызывающий его внутри конструктора).

Ответы - Конструктор класса Laravel должен принимать коллекцию моделей / Laravel class constructor must accept collection of models

kame_house

12.01.2020 03:29:16

К сожалению, нет, это невозможно сделать.

PHP выделяет память динамически, и более того, ему все равно, какой объект вы храните в своей коллекции (или массиве).

Для тех, кто привык к таким языкам, как java, это может быть довольно странно. Это обеспечивает гибкость, поскольку вы можете хранить в своей коллекции любой объект или переменную, но в то же время это может привести к неожиданному поведению..

Является ответом!
Alex Bouma

12.01.2020 03:31:29

PHP не поддерживает дженерики, поэтому короткий ответ-нет.


Однако при поиске в Google "PHP typed arrays" вы найдете кучу пакетов, которые позволят вам делать то, что вы хотите, создавая пользовательский класс, который принимает только те типы, которые вы хотите, и вы можете вводить их. Но для пользовательских типов вам нужно будет создать свой собственный класс, который принимает только значения определенного типа.

Мне очень нравится этот пост и предложенные там идеи.

Помочь в развитии проекта:
Закрыть X