是否可以为参数指定多个类型提示?

2022-08-30 19:31:20

有没有办法向方法添加多个类型提示?例如,foo(param) 必须接收字符串 OR bar OR baz 的实例。


答案 1

这是不可能的(除了在方法内部)。您只能提供单个类型提示,并且只能为对象/接口和数组提供提示(从 PHP 5.1 开始)。

但是,您可以/应该将其记录在您的方法中,即:

/**
 * @param string|Bar|Baz $param1
 */
function foo($param1);

答案 2

这是接口的一种用法。如果要确保对象具有方法,则可以期望使用接口:->foobar($baz)

interface iFooBar {
    public function foobar($baz);
}

class Foo implements iFooBar {
    public function foobar($baz) { echo $baz; }
}
class Bar implements iFooBar {
    public function foobar($baz) { print_r($baz); }
}

function doSomething(iFooBar $foo) {
    $foo->foobar('something');
}

然后,在呼叫时,这些将起作用:

doSomething(new Foo());
doSomething(new Bar());

这些不会:

doSomething(new StdClass());
doSomething('testing');

推荐