如何在 PHP 中记录静态 class 属性

How to document static class properties in PHP

鉴于以下情况,您在 Foo 上有一个静态 属性 记录为 FooApp 的一个实例,一个扩展的 class Bar,并且在运行时发现静态 属性 实际上设置为 BarApp 的实例而不是 FooApp:

class Foo
{
    /** 
     * @var FooApp
     */
    public static $app;
}

class Bar extends Foo
{
}

Bar::$app = BarApp();

…记录 Bar 的正确方法是什么,以便很明显它的静态 $app 将被设置为 BarApp 实例而不是 FooApp

我已经尝试了以下但 PhpStorm 不尊重它,可能是因为 @property 不适用于静态属性:

/**
 * @property BarApp $app
 */
class Bar extends Foo
{
}

到目前为止,我唯一想到的就是在代码中重写 $bar

class Bar
{
    /** 
     * @var BarApp
     */
    public static $app;
}

这有点烦人,因为它会导致额外的代码,而理论上额外的文档就足够了(例如使用 @property@method 覆盖实例级属性和方法文档的情况) ).

(这里的用例是一个 Yii 应用程序 - Foo 代表 BaseYii 并且 Bar 代表扩展它的自定义 class;FooApp 代表yii\base\ApplicationBarApp 表示扩展它的自定义 class。)

请注意:这是一个跟踪答案,可以帮助人们从搜索结果到达这里。

在撰写本文时,根本没有(官方)文档标记来注释 "magic" 静态属性,PHPDocumentor standard nor the proposed PSR19 中也没有。

如果你是 PHP-FIG 的一员(看着你@Chuck Burgess),你可能想考虑将它添加到 PSR19,最好是作为 @property 标签的扩展— 例如像这样:

 * @property static type $name Free text description

"static" 是可选关键字,对于非静态虚拟属性可以省略。

否则,我已经在 PHPStorm 问题跟踪器上打开了 an issue。如果您希望在 PHPStorm 中实现此功能,请考虑为其投票。