abe*_*sto 20 php phpdoc magic-methods
注释(在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