在PHP中,因为接口的好处可以通过传递参数来提及接口名称类似
public function foo (Abc $abc){}
其中Abc是一个接口。但是我如何传递这些接口的数组呢?
请注意,这不是类,而是界面,只有获得界面的方法是通过类型提示传递函数
答案 0 :(得分:1)
在PHP 5.6+中你可以这样做:
function foo(Abc ...$args) {
}
foo(...$arr);
foo()
接受类型为Abc
的可变数量的参数,并通过调用foo(...$arr)
将解包$arr
解压缩到参数列表中。如果$arr
包含Abc
个实例以外的任何内容,则会抛出错误。
这有点'hacky',但它是在PHP中为数组提示类型提示的唯一方法,而不会放下一些额外的代码。
答案 1 :(得分:0)
不幸的是,你不能在PHP中使用type hinting
同时检查两个不同的接口,但你可以为此编写一个函数来检查对象是否属于多个接口,例如 -
function belongs_to_Interfaces($obj,array $interfaces)
{
foreach($interfaces as $interface)
{
if(!is_a($obj,$interface))
{
return false;
}
}
return true;
}
然后您可以像这样使用它,
public function foo ($abc){
if(!belongs_to_Interfaces($abc, ['interface1', 'interface2'])){
//throw an error or return false
}
}
答案 2 :(得分:0)
如果您使用PHP 5.6+,则可以使用variadic和装饰器模式:
<?php
interface Rule {
public function isSatisfied();
}
final class ChainRule implements Rule {
private $rules;
public function __construct(Rule ...$rules) {
$this->rules = $rules;
}
public function isSatisfied() {
foreach($this->rules as $rule)
$rule->isSatisfied();
}
}