PHP动态返回类型提示

时间:2016-08-16 15:32:47

标签: php types

假设我有以下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。

**编辑功能以反映我的预期用途。我原本想要保持它不受任何特定用例的影响,以免臃肿这个问题。还要注意,实际的包装器更复杂,因为我还包含了特定于模型的隐式对象关系和连接等。

1 个答案:

答案 0 :(得分:0)

现在可以使用IntellJ(IDEA / phpStorm / webStorm)插件DynamicReturnTypePlugin来实现: https://github.com/pbyrne84/DynamicReturnTypePlugin