给定以下场景,您在 Foo
上有一个静态属性,记录为 FooApp
的一个实例,一个扩展类 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
代表一个扩展它的自定义类; FooApp
代表 yii\base\Application
而 BarApp
代表一个扩展它的自定义类。)
最佳答案
请注意:这是一个跟踪答案,可以帮助人们从搜索结果到达这里。
在撰写本文时,根本没有(官方)文档标记来注释“魔法” 静态属性,PHPDocumentor standard 中也没有。也不是 proposed PSR19 .
如果你是 PHP-FIG 的一员(看着你@Chuck Burgess),你可能想考虑将它添加到 PSR19,最好是作为 @property
标签的扩展——对于像这样的例子:
* @property static type $name Free text description
“static” 是可选关键字,对于非静态、虚拟属性可以省略。
否则,我打开了an issue在 PHPStorm 问题跟踪器上。如果您希望在 PHPStorm 中实现这一点,请考虑为其投票。
关于php - 如何在 PHP 中记录静态类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30134643/