【问题标题】:Laravel class constructor must accept collection of modelsLaravel 类构造函数必须接受模型集合
【发布时间】:2020-04-29 09:43:36
【问题描述】:

类构造函数有没有办法验证输入参数是某些对象的集合?

我知道我能做到:

public function __construct(Collection $input)

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

public function __construct(Collection<User> $input)

【问题讨论】:

  • AFAIK 这是不可能的。一种方法是在构造函数中检查集合的内容(或创建一个执行检查的方法并在构造函数中调用它)。

标签: laravel collections laravel-collection


【解决方案1】:

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


但是,当你在谷歌上搜索“php 类型数组”时,你会发现一堆包,它们允许你通过创建一个只接受你想要的类型的自定义类来做你想做的事情,并且你可以输入提示这些类型。但是对于自定义类型,您需要创建自己的类,该类只接受特定类型的值。

我非常喜欢 this 的帖子和其中提出的想法。

【讨论】:

    【解决方案2】:

    不幸的是,它无法做到。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-20
      • 2014-07-02
      • 2020-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多