【问题标题】:phpdoc @return with lazy loadingphpdoc @return 延迟加载
【发布时间】:2013-07-01 13:11:33
【问题描述】:

我不知道如何记录我的自动完成方法。

我的模型 Training 有一个 getAnimators() 方法,该方法返回一个 Db_MysqlResult,它实现了 SeekableIterator 和 Countable。当我迭代它时,这个 Db_MysqlResult 将创建我的 Animator 对象,例如:

<?php
foreach ($training->getAnimators() as $animator) {
    // Autocompletion shows me next, seek, etc. not getName
    echo $animator->getName(); 
}
?>

我可以在我的 getAnimators() 中写入 @return Animators[],即使它不正确,因为它返回 Db_MysqlResult?

提前感谢您的帮助。

【问题讨论】:

    标签: return phpdoc


    【解决方案1】:

    如果你正在寻找你的 $animator 变量来自动完成它的方法,你最好的选择可能是在其中添加一个 @var 行提示:

    /** @var Animator $animator */
    echo $animator->
    

    一些 IDE 能够将 @var 行识别为类型提示,并使用它为您提供自动补全。

    但是,我不知道有任何 IDE 可以识别您的 $training->getAnimators() 的返回值并自动知道 $animator 的类型,因为它们在 foreach() 中被捆绑在一起。

    【讨论】:

    • 这就是我正在做的,但我想避免它。我的问题不是如何让我的 var $animator 自动完成,而是如何根据我的对象加载方式编写我的 phpdoc。
    • 好吧,我被你的第一句话吓跑了,“如何记录我的自动完成方法”。根据您的描述,getAnimators() 实际上确实预先生成了 Animator 对象并返回 SeekableIterator 集合(像一个数组,但不完全是一个数组),那么在我看来,“@return Animator[]”表示该集合Animator 对象是记录它的“正确”方式。它应该显示“Animator[]”而不是“Animators[]”,因为“数组”的每个成员都是一个 Animator 实例。
    • 当我在 SeekableIterator 的“当前”方法中时,该类被实例化,所以起初我的集合不包含我的 Animator 对象,这就是问题所在。但正如你所说,写 @return Animator[] 很好,所以我会写它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    • 2014-03-06
    • 2021-07-13
    • 2010-11-26
    • 2011-08-26
    • 2018-08-08
    相关资源
    最近更新 更多