动态参数

Arv*_*res 1 php oop type-hinting laravel-5.2

我正在使用Laravel 5.2,我想创建一个方法,其中参数必须是Foo,Bar或Baz的实例.如果参数不是任何这些类的对象,则抛出错误.

App\Models\Foo;
App\Models\Bar;
App\Models\Baz;


public function someMethod(// what to type hint here??)
{
   // if 1st argument passed to someMethod() is not an object of either class Foo, Bar, Baz then throw an error
}
Run Code Online (Sandbox Code Playgroud)

这该怎么做?

rjd*_*own 5

没有办法以你想要的方式提供多种类型的提示(除非他们根据Dekel的答案扩展/实现彼此).

您需要手动强制执行该类型,例如:

public function someMethod($object) {
    if (!in_array(get_class($object), array('Foo', 'Bar', 'Baz'))) {
        throw new Exception('ARGGH');
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以通过提供所需类型列表作为phpdoc提示来帮助最终用户:

/**
 * Does some stuff
 * 
 * @param Foo|Bar|Baz $object
 * @throws Exception
 */
Run Code Online (Sandbox Code Playgroud)