[英]PHP dynamic return type hinting
假设我有以下 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。
** 编辑功能以反映我的预期用途。 我最初想保持它没有任何特定的用例,以免问题膨胀。 另请注意,实际的包装器更复杂,因为我还合并了特定于模型的隐式对象关系和连接等。
这现在可以通过 IntellJ (IDEA/phpStorm/webStorm) 插件 DynamicReturnTypePlugin 实现: https : //github.com/pbyrne84/DynamicReturnTypePlugin
为此,我使用 phpdoc @mehtod
。 例如,我创建了由其他 Repository 类扩展的AbstractRepository
类。 假设我们有AbstractRepository::process(array $results)
方法,它的返回类型根据扩展它的类而改变。 所以在子类中:
/**
* @method Car[] process(array $results)
*/
class CarRepo extends AbstractRepository {
//implementation of process() is in the parent class
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.