代码之家  ›  专栏  ›  技术社区  ›  Matthew Daly

在PHP 7中将多个typehinted对象动态传递到类的构造函数中

  •  3
  • Matthew Daly  · 技术社区  · 7 年前

    假设我在类的构造函数中向接口键入一系列值:

    <?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);
    

    在构造新类时,我想不出一种方法来动态构建我想要传递的项,而不将其更改为一个数组,我宁愿不这样做,因为类型提示显然会捕获任何传递的对象,而这些对象不应该是数组。有人能看到我如何做到这一点吗?

    2 回复  |  直到 7 年前
        1
  •  4
  •   iainn    7 年前

    splat运算符( ... )工作方式有两种-您可以在函数定义中使用它,但也可以使用它将项目数组解包到函数参数中。

    尝试:

    $myclass = new MyClass(...$items);
    

    看见 https://eval.in/927133 完整示例

        2
  •  -2
  •   Vladimir    7 年前

    可以使用array创建新类:

    <?php
    
    use Interfaces\Item;
    
    class MyClass
    {
        public function __construct(array $items)
        {
            // Do stuff
        }
    }
    
    
    $myclass = new MyClass([$item1, $item2 ,...]); //php7.*
    
    $myclass = new MyClass(array($item1, $item2 ,...)); //php5.*