PHPDoc和__callStatic

abe*_*sto 20 php phpdoc magic-methods

TL;博士

注释(在PHPDoc中)通过实现的函数的正确方法是什么__callStatic?更重要的是:有没有办法让NetBeans PHPStorm理解这些是静态方法?

动机

如果你想要更大的图片,这就是我对这个问题的看法.

问题:在我目前的项目中,我们有很多类应该是单例(DB代理等).不用说,我们至少有几百require_once$foo = new FooProxy();线.

解决方案:我创建了一个Loader类来解决这个问题,使用__callStatic魔术方法,所以我们可以说$foo = Loader::FooProxy();.它非常适合我们的目的,但是:

问题:这种方式在团队中使用的IDE中显然没有类型提示.

解决方案:每个模块定义一个子类Loader,添加仅路由到的方法__callStatic.

问题:为了自动完成而添加实际解释的代码是不可接受的(这可以争论,但让我们暂时接受它).

解决方案:我们不添加任何实际方法,只需在PHPDoc中声明方法如下:

<?php
/**
 * @method FooProxy FooProxy()
 */
 class BarLoader extends Loader {}
?>
Run Code Online (Sandbox Code Playgroud)

问题:FooProxy不是静态方法.以下所有内容都不会使其成为静态:

<?php
/**
 * @static
 * @method FooProxy FooProxy()
 */

///////////////

/**
 * @static @method A A()
 * @method static A A()
 * @method A static A()
 * @method A A() static
 */
Run Code Online (Sandbox Code Playgroud)

使类抽象没有区别.大约一个小时的谷歌没有出现任何解决方案.主要目标是让IDE了解这些功能; 拥有正确的PHPDoc并不是必需的.

Ale*_*nko 31

那么,PhpStorm 3.0将接受

@method static type name() description
Run Code Online (Sandbox Code Playgroud)

请参阅相关功能请求http://youtrack.jetbrains.net/issue/WI-4051