Laravel конструктор класса должен принимать коллекцию моделей - PullRequest
0 голосов
/ 12 января 2020

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

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

public function __construct(Collection $input)

Но возможно ли форсировать это должна быть коллекция заданных объектов (моделей)? Что-то вроде:

public function __construct(Collection<User> $input)

Ответы [ 2 ]

1 голос
/ 12 января 2020

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


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

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

1 голос
/ 12 января 2020

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...