PHP - 仅接受特定类的数组

时间:2016-08-08 12:01:58

标签: php arrays class

我们说我有一个Product类,如何告诉PHP我只想接受Product的数组?

换句话说,有没有办法做这样的方法?:

private function method(Product[] $products)
{
    // ...
}

我想过做这样的事情:

private function validate($products)
{
    foreach ($products as $product)
        if (!is_a($product, 'Product')
            return false;

    // ...
}

它可以工作,但我不喜欢添加一堆行的想法,只是为了确保它是" Product[]"。

1 个答案:

答案 0 :(得分:5)

您只能输入任何容器的提示。所以你必须这样做

private function method(Array $products)

PHP只能在给定的类型提示中验证参数本身,而不是参数可能包含的任何内容。

验证数组的最佳方法是循环,如你所说,但我会稍作改动

private function validate(Array $products)
{
    foreach($products as $product)
        if (!($product instanceof Product))
            return false;
}

这样做的好处是可以避免函数调用的开销

另一个想法是创建一个包装类

class Product_Wrapper {
     /** @var array */
     protected $products = array();

     public function addProduct(Product $product) {
         $this->products[] = $product;
     }

     public function getProducts() {
         return $this->products;
     }
}

这样,您的包装器不能包含除Product

的实例之外的任何内容