【发布时间】:2017-01-09 12:12:25
【问题描述】:
我正在使用 Phalcon 框架,它具有模型类:Phalcon\Mvc\Model(从现在起仅作为 P\M\Model)。我已经定义了基域,它扩展了该类,然后所有其他域都扩展了我的基域,因此 Phalcons 模型类:
域名.php:
class Domain extends \Phalcon\Mvc\Model
{
...
}
DomainA.php:
class DomainA extends Domain
{
...
}
然后我使用存储库管理器获取DomainA 模型的存储库。所有存储库都有相同的父级,类似于定义了方法 find() 的 Domain
Repository.php:
class Repository
{
/**
* Will always return object of classes
* which extends Phalcon\Mvc\Model
*
* @return Phalcon\Mvc\Model
*/
public function find()
{
...
$domain::find();
}
}
RepositoryA.php:
class RepositoryA extends Repository
{
...
}
所以,RepositoryA 现在有来自其父级的 find() 方法,因为父级并不确切知道他将返回什么,但知道所有返回的父级,所以它通过 @ 进行类型提示987654330@.
然后我有一些其他类,它的方法只需要 DomainA 对象,它也是 P\M\Model 的父对象,我尝试将这种类型的对象推送到那里它工作正常,因为从存储库返回的对象实际上是DomainA 对象,但 Repository 将其注释为 P\M\Model,因此 PhpStorm 用消息突出显示它 "Expected DomainA, got Phalcon\Mvc\Model..."
public function pleaseGiveDomainA(DomainA $obj)
{
...
}
// Works OK but is higlighted in IDE
$this->pleaseGiveDomainA($repositoryA->find());
我应该如何注释这种东西?在@return 中提示@return DomainA|DomainB|DomainC... 等所有域的情况都不好,因为我们有数百个域,而且在功能上期望父P\M\Model 也不好,因为我们想确定它是唯一的DomainA。
谢谢。
【问题讨论】:
-
@GerardRoche 这一个比它大一天,那么另一个不应该被认为可能重复吗?
标签: php phpstorm phpdoc type-hinting