Bra*_*lly 2 php phpdoc yii phpstorm
考虑到以下场景,您将静态属性Foo记录为 的实例FooApp,扩展类Bar,并且在运行时发现该静态属性实际上设置为的实例BarApp而不是FooApp:
class Foo
{
/**
* @var FooApp
*/
public static $app;
}
class Bar extends Foo
{
}
Bar::$app = BarApp();
Run Code Online (Sandbox Code Playgroud)
...什么是记录的正确方法,Bar以便清楚地将其静态$app设置为BarApp实例而不是FooApp?
我已经尝试了以下但 PhpStorm 不尊重它,可能是因为@property它不适用于静态属性:
/**
* @property BarApp $app
*/
class Bar extends Foo
{
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我唯一想到的实际上是$bar在代码中覆盖:
class Bar
{
/**
* @var BarApp
*/
public static $app;
}
Run Code Online (Sandbox Code Playgroud)
这有点烦人,因为当理论上额外的文档已经足够时,它会导致额外的代码(例如在使用@propertyand覆盖实例级属性和方法的文档的情况下@method)。
(这里的用例是一个 Yii 应用程序 -Foo表示BaseYii并Bar表示扩展它的自定义类;FooApp表示yii\base\Application并BarApp表示扩展它的自定义类。)
请注意:这是一个跟踪答案,可帮助人们从搜索结果到达这里。
在撰写本文时,在PHPDocumentor 标准和提议的 PSR19 中都没有(官方)文档标签来注释“神奇”静态属性。
如果您是 PHP-FIG 的一部分(看着您@Chuck Burgess),您可能需要考虑将其添加到 PSR19,最好是作为@property标签的扩展- 例如像这样:
* @property static type $name Free text description
Run Code Online (Sandbox Code Playgroud)
与“静态”作为一个可选关键字可以用于非静态的,虚拟属性可省略。
否则,我已经在 PHPStorm 问题跟踪器上打开了一个问题。如果您希望在 PHPStorm 中实现此功能,请考虑为它投票。