假设我有一个Product类,我怎么能告诉PHP我只想接受Array Product?
换句话说,有没有办法做这样的方法?:
private function method(Product[] $products)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
我想过做这样的事情:
private function validate($products)
{
foreach ($products as $product)
if (!is_a($product, 'Product')
return false;
// ...
}
Run Code Online (Sandbox Code Playgroud)
它可以工作,但我不喜欢添加一堆行只是为了确保它是一个" Product[]".
您只能输入任何容器的提示.所以你必须这样做
private function method(Array $products)
Run Code Online (Sandbox Code Playgroud)
PHP只能在给定的类型提示中验证参数本身,而不能验证参数可能包含的任何内容.
验证数组的最佳方法是循环,如你所说,但我会稍微改变一下
private function validate(Array $products)
{
foreach($products as $product)
if (!($product instanceof Product))
return false;
}
Run Code Online (Sandbox Code Playgroud)
这样做的好处是可以避免函数调用的开销
另一个想法是创建一个包装类
class Product_Wrapper {
/** @var array */
protected $products = array();
public function addProduct(Product $product) {
$this->products[] = $product;
}
public function getProducts() {
return $this->products;
}
}
Run Code Online (Sandbox Code Playgroud)
这样,您的包装器不能包含除实例之外的任何内容 Product
| 归档时间: |
|
| 查看次数: |
285 次 |
| 最近记录: |