假设我有以下PHP函数:
/**
* @param string $className
* @param array $parameters
* @return mixed
*/
function getFirstObject($className, $parameters) {
// This uses a Doctrine DQl builder, but it could easily replaced
// by something else. The point is, that this function can return
// instances of many different classes, that do not necessarily
// have common signatures.
$builder = createQueryBuilder()
->select('obj')
->from($className, 'obj');
addParamClausesToBuilder($builder, $parameters, 'obj');
$objects = $builder
->getQuery()
->getResult();
return empty($objects) ? null : array_pop($objects);
}
基本上,如果出现问题,函数总是返回用$className
参数指定的类的实例或null
。唯一的问题是,我不知道这个函数可以返回的完整类列表。 (在编译时)
是否可以为此类函数的返回类型获取类型提示?
在Java中,我只是使用泛型来暗示返回类型:
static <T> T getOneObject(Class<? extends T> clazz, ParameterStorage parameters) {
...
}
我知道手动类型提示,比如
/** @var Foo $foo */
$foo = getOneObject('Foo', $params);
但我希望有一个不需要这个样板线的解决方案。
详细说明:我正在尝试编写一个围绕Doctrine的包装器,以便我可以轻松获取我想要的模型实体,同时封装ORM系统的所有特定用法。我正在使用PhpStorm。
**编辑功能以反映我的预期用途。我原本想要保持它不受任何特定用例的影响,以免臃肿这个问题。还要注意,实际的包装器更复杂,因为我还包含了特定于模型的隐式对象关系和连接等。
答案 0 :(得分:0)
现在可以使用IntellJ(IDEA / phpStorm / webStorm)插件DynamicReturnTypePlugin来实现: https://github.com/pbyrne84/DynamicReturnTypePlugin