假设我在类的构造函数中将一系列值类型提示到接口(interface):
<?php
use Interfaces\Item;
class MyClass
{
public function __construct(Item ...$items)
{
// Do stuff
}
}
我可以很容易地手动传递这些项目:
$myclass = new MyClass($item1, $item2);
但我正在努力让它更动态地工作 - 以下内容不起作用,因为它希望接收 Item
的多个实例而不是一个数组,因此它引发了 TypeError
:
$items = [
$item1,
$item2
];
$myclass = new MyClass($items);
我想不出一种方法来动态构建我想在构建新类时传递的项目而不更改它以期望数组,我宁愿不这样做,因为类型提示显然会捕获传递的任何对象通过那不应该。任何人都可以看到我如何实现这一目标吗?
最佳答案
splat 运算符 (...
) 有两种工作方式 - 您可以像已有的那样在函数定义中使用它,但您也可以使用它来将项目数组解包到函数参数中.
尝试:
$myclass = new MyClass(...$items);
参见 https://eval.in/927133一个完整的例子
关于php - 将多个类型提示对象动态传递到 PHP 7 中类的构造函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48010369/