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 以及其中提出的想法。
有没有办法让 class 构造函数验证输入参数是特定对象的集合?
我知道我能做到:
public function __construct(Collection $input)
但是是否可以强制它必须是给定对象(模型)的集合? 类似于:
public function __construct(Collection<User> $input)
很遗憾,不可以。
PHP 动态分配内存,而且,它不关心您在集合(或数组)中存储的对象类型。
对于习惯了 java 等语言的人来说,这可能很奇怪。 这提供了灵活性,因为您可以在集合中存储任何类型的对象或变量,但同时它可能会导致意外行为..
PHP 不支持泛型,所以简短的回答是否定的。
然而,当谷歌搜索 "php typed arrays" 时,您会发现一堆包,这些包将允许您通过创建自定义 class 来做您想做的事情,该自定义 class 只接受您想要的类型并且您能够键入提示那些。但是对于自定义类型,您需要创建自己的 class,它只接受特定类型的值。
我非常喜欢 this post 以及其中提出的想法。