有没有办法在PHP中实现这样的东西?
interface Editable {}
interface Deletable {}
function clear(Editable Deletable $object) {
...
}
答案 0 :(得分:4)
您可以扩展类等接口:
interface Editable {}
interface Deletable {}
interface EditAndDeletable extends Editable, Deletable {}
function clear(EditAndDeletable $object) {
...
}
$ object的类型现在必须实现Editable和Deleteable的所有方法。
答案 1 :(得分:1)
如果我是你,我有这个问题,我可能会做这样的事情:
interface Editable {}
interface Deletable {}
function clear($object) {
if( $object instanceof Editable ){
...
}elseif( $object instanceof Deletable ){
...
}else{
throw new InvalidArgumentException("\$object must be of type 'Editable' or 'Deletable' but " . get_class($object) . " was provided.");
}
...
}
不是试图仅为一个参数的签名构建接口,而是更倾向于处理函数体本身中的参数并从签名中删除严格的要求。如果你得到一个不好的论点,Exception就是为了保持整洁。