我们说我有一个Product
类,如何告诉PHP我只想接受Product
的数组?
换句话说,有没有办法做这样的方法?:
private function method(Product[] $products)
{
// ...
}
我想过做这样的事情:
private function validate($products)
{
foreach ($products as $product)
if (!is_a($product, 'Product')
return false;
// ...
}
它可以工作,但我不喜欢添加一堆行的想法,只是为了确保它是" Product[]
"。
答案 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