哪个 PHP 变量类型声明的文档注释是正确的?

Which PHP documentation comment for variable type declaration is correct?

我搜索了不同的指南和文档,了解如何在文档中正确声明变量类型,但似乎有几种不同的选择。

3 种不同的可能性是:

/** @var integer $sum */
/** @var $sum integer */
/* any of the above but with 1 asterisk */

对于方法参数和变量,在很多不同的文档中都写得很清楚。但是,如果我们谈论的是不在函数或视图文件(MVC 设计模式)中的变量呢?

在我的工作场所,我们目前使用 2 种不同的软件(NetBeansPhpStorm)。我们注意到它们提供了不同的模板来在文档中声明变量类型。

在 PhpStorm 中:

在 NetBeans 中:

在 Whosebug 中,我还发现了 2 种不同的用途 (highly upvoted answer uses NetBeans option with 1 asterisk but in another question it says it's reversed and also uses 2 asterisks)。

由于我们用的是Yii2框架,所以也看看他们是怎么写doc注释的。他们正在使用 this format:

/* @var $this yii\web\View */

我最后感兴趣的(不如上面的问题那么重要)是我是否需要在评论中声明完整路径或在评论中声明对象时的用法?完整路径如下:

/** @var yii\BaseYii $object */
echo $object::createObject(1);

完整路径看起来像这样:

use yii\BaseYii;

/** @var BaseYii $object */
echo $object::createObject(1);

我们希望尽可能准确地遵循 PHP 标准。

感谢任何帮助。


我知道这个问题可能太宽泛不清楚你在问什么,我也会密切关注看看进展如何。

我通常看到的是 PSR-5 建议的:

/** @var int $sum This is a sum. */
$sum = 0;

关于是否声明完整路径,这些都是有效的例子:

namespace \A\B\C;

use yii\BaseYii;

/** @var BaseYii $yii */
$yii = $factory->getApplication();

namespace \A\B\C;

/** @var \yii\BaseYii $yii */
$yii = $factory->getApplication();

namespace \A\B\C;

/** @var \ArrayObject|null $array */
$array = null;

/**
 * @return \DateTime
 */
function now()
{

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="foo")
 */
class Foo