假设我有一个 Product
类,我如何告诉 PHP 我只想接受 Product
数组?
换句话说,有没有办法做这样的事情?:
private function method(Product[] $products)
{
// ...
}
我想过做这样的事情:
private function validate($products)
{
foreach ($products as $product)
if (!is_a($product, 'Product')
return false;
// ...
}
它可以工作,但我不喜欢添加一堆行来确保它是“Product[]
”的想法。
最佳答案
无论容器是什么,您都只能输入提示。所以你必须做
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
关于PHP - 只接受特定类的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38828696/