【发布时间】:2019-08-25 03:40:48
【问题描述】:
我正在尝试实现一个处理查询的结果类。所以,简单地说,你会有这样的功能:
function all();
function first();
function paginate(int $perPage, int $pageNo = 1);
这很好用,问题是当在多个不同的查询类中使用相同的结果类时,IDE 无法知道返回类型。示例:
UserQuery->results()->all() 将返回一个用户实体数组。
UserQuery->results()->first() 将返回单个用户实体。
在某些语言中,您有泛型,这意味着我可以在 UserQuery 类中使用 Results<User>,然后我的 Results 类可以分别返回 T[] 和 T。
我的一个想法是将一个空实体作为构造函数传递给 Results 类,然后尝试使用该属性作为返回类型,但我想不通。有什么解决方法吗?我要解决的主要问题是 IDE 自动完成和分析,因此纯 phpDoc 解决方案非常适合我的用例。
我能想到的唯一其他解决方法是必须为每种实体类型编写一个单独的 Results 类,这会很累。
【问题讨论】:
-
在 Eclipse 和 PHP Storm 中,您可以手动执行类似
/* @var $foo Users */的类型提示,例如在循环之前,以便as $foo部分具有自动完成功能。 -
是的,当 IDE 没有检测到正确的类型时,我通常会这样做。不幸的是,最终编写的代码几乎与最后一个选项一样多,因为我必须记录每次使用的返回值,而不仅仅是定义它的位置。它对重构也不是很友好。