phpDoc 有没有办法将对象数组记录为参数?

Posted

技术标签:

【中文标题】phpDoc 有没有办法将对象数组记录为参数?【英文标题】:Is there a way for phpDoc to document an array of objects as a parameter? 【发布时间】:2012-02-26 06:32:04 【问题描述】:

phpDoc 生成的文档中,我可以使 phpDoc 使用

为给定参数生成指向自定义类型定义的链接
@param CustomType $variablename

而且效果很好。但是,我目前正在记录的代码需要 CustomType[] 参数,即所述 CustomType 的数组。我希望文档清楚地表明需要一个数组,但是当我使用

@param CustomType[] $variablename

phpDoc 不再识别该类型,因此无法链接到它的定义。在这种情况下,这一点非常重要 - 我正在记录一个 API,该 API 需要提供一些相当复杂的类型。

我为此尝试了几种不同的语法,并且都将条目视为单独的变量类型或在文档中破坏类型识别。

除此之外,我只会在参数注释中注明,但在类型中显示参数的数组性似乎更清楚。

编辑

使用 phpDocumentor 2(与 DocBlox 合并)

@param CustomType[] $paramName

语法有效,正如@Styx 的回答中所述,PhpStorm 支持使用该语法进行类型提示。

已接受的答案已适当更新。

【问题讨论】:

可能重复:***.com/questions/778564/… 不是真的;它们是免费的——他问的是 IDE 中的类型提示,而我的是关于 phpDoc 文档本身的——在我的例子中,tpe 提示只是一个很好的副作用。 要记录关联数组的形状,请参阅***.com/questions/14612773/… - 一种方法是github.com/phpDocumentor/fig-standards/issues/30#issue-20061866 【参考方案1】:

你能做的最好的就是:

@param array $variablename an array of @link CustomType objects

这应该有助于读者了解 $variablename 的真实数据类型,同时表明对数组包含的内容的期望。

在使用 $variablename 中的成员并期望出现 CustomType 的属性/方法时,这不足以帮助 IDE 自动完成。目前真的没有办法得到这种行为。

【讨论】:

当然,正在努力使数据类型签名语法为“CustomObject[]”=>“自定义对象成员数组”。一旦它在文档生成器中可用,我希望 IDE 可能会支持它的含义。 这几乎是我已经接受的,但是到 docblox 的链接可能值得关注。谢谢!【参考方案2】:

新版 PHP 文档支持 /** @var sometype[] */ 语法。更复杂的是:/** @var (sometype|othertype)[] */。 http://www.phpdoc.org/docs/latest/guides/types.html#arrays PHPStorm 也支持这种语法。

【讨论】:

【参考方案3】:

请参阅以下示例: https://code.google.com/p/google-api-php-client/source/checkout 其中描述了输入参数的数组结构。

/**
  * Set the OAuth 2.0 access token using the string that resulted from calling authenticate()
  * or Google_Client#getAccessToken().
  * @param string $accessToken JSON encoded string containing in the following format:
  * "access_token":"TOKEN", "refresh_token":"TOKEN", "token_type":"Bearer",
  *  "expires_in":3600, "id_token":"TOKEN", "created":1320790426
  */


/**
  * Insert a new file. (files.insert)
  *
  * @param Google_DriveFile $postBody
  * @param array $optParams Optional parameters.
  *
  * @opt_param bool convert Whether to convert this file to the corresponding Google Docs format.
  * @opt_param string targetLanguage Target language to translate the file to. If no sourceLanguage is provided, the API will attempt to detect the language.
  * @opt_param string sourceLanguage The language of the original file to be translated.
  * @opt_param string ocrLanguage If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.
  * @opt_param bool pinned Whether to pin the head revision of the uploaded file.
  * @opt_param bool ocr Whether to attempt OCR on .jpg, .png, or .gif uploads.
  * @opt_param string timedTextTrackName The timed text track name.
  * @opt_param string timedTextLanguage The language of the timed text.
  * @return Google_DriveFile
  */

【讨论】:

在 phpdoc 网站/参考 phpdoc.org/docs/latest/references/phpdoc/index.html 或建议的 PSR5 文档 github.com/phpDocumentor/fig-standards/blob/master/proposed/… 上没有提及 @opt_param 被支持 - 无论谁创作了您复制的 docblock,也可能已经输入@this_wont_work_param (!) 在github.com/phpDocumentor/phpDocumentor2/issues/650 讨论记录数组的键【参考方案4】:

http://www.phpdoc.org/docs/latest/guides/types.html 的 phpdoc 文档说明

数组

未知类型变量的集合。可以指定数组成员的类型,更多信息请参见数组章节。

而且...没有链接,也没有“关于数组”的章节。所以不,这看起来像是即将推出的功能。

【讨论】:

【参考方案5】:

注意:此答案是对其他答案的补充。

要记录一组对象,您可以使用@param ClassName[] $classInstance Description。 但请注意,在 PHP 7 中,您可以使用参数类型声明(类型提示),在这种情况下,类型必须是 array

例子:

提示:您还应该使用declare(strict_types=1);

【讨论】:

以上是关于phpDoc 有没有办法将对象数组记录为参数?的主要内容,如果未能解决你的问题,请参考以下文章

用于可变长度参数数组的 PHPDoc

有没有办法将字符串数组转换为对象集合?

PHPDoc:用可变数量的参数记录函数

有没有办法将一组表单输入字段作为对象数组发布?

有没有办法将 json 对象转换为 json l 文件

在 PHPDoc 中记录数组选项的最佳方法?