Laravel class 构造函数必须接受模型集合

Laravel class constructor must accept collection of models

有没有办法让 class 构造函数验证输入参数是特定对象的集合?

我知道我能做到:

public function __construct(Collection $input)

但是是否可以强制它必须是给定对象(模型)的集合? 类似于:

public function __construct(Collection<User> $input)

很遗憾,不可以。

PHP 动态分配内存,而且,它不关心您在集合(或数组)中存储的对象类型。

对于习惯了 java 等语言的人来说,这可能很奇怪。 这提供了灵活性,因为您可以在集合中存储任何类型的对象或变量,但同时它可能会导致意外行为..

PHP 不支持泛型,所以简短的回答是否定的。


然而,当谷歌搜索 "php typed arrays" 时,您会发现一堆包,这些包将允许您通过创建自定义 class 来做您想做的事情,该自定义 class 只接受您想要的类型并且您能够键入提示那些。但是对于自定义类型,您需要创建自己的 class,它只接受特定类型的值。

我非常喜欢 this post 以及其中提出的想法。