假设您在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
重写示例级属性和方法的文档)。
(The这里的用例是一个Yii应用程序-Foo
代表BaseYii
,Bar
代表一个扩展它的自定义类; FooApp
表示yii\base\Application
,而BarApp
表示扩充它的自订类别。)
1条答案
按热度按时间b0zn9rqh1#
请注意:这是一个跟踪答案,以帮助人们从搜索结果到达这里。
在撰写本文时,PHPDocumentor standard和proposed PSR19中都没有(官方)文档标记来注解 “magic” 静态属性。
如果你是PHP-FIG的一员(看着你@Chuck Burgess),你可能会考虑把它添加到PSR 19中,最好是作为
@property
标签的扩展-例如:否则,我已经在PHPSorm问题跟踪器上打开了an issue。如果你想在PHPSorm中实现它,考虑投票支持它。