【发布时间】:2011-08-24 08:23:19
【问题描述】:
tl;博士
注释(在 PHPDoc 中)通过__callStatic 实现的函数的正确方法是什么?更重要的是:有没有办法让 NetBeans 和 PHPStorm 明白这些是静态方法?
动机
如果您想了解更大的情况,这就是我提出这个问题的方法。
问题:在我当前的项目中,我们有很多真正应该是单例的类(数据库代理等)。不用说,我们至少有几百行 require_once 和 $foo = new FooProxy(); 行。
解决方案:我创建了一个Loader 类来解决这个问题,使用__callStatic 魔术方法所以我们可以说$foo = Loader::FooProxy();。它非常适合我们的目的,但是:
问题:这种方式显然在团队中使用的任何一个 IDE 中都没有类型提示。
解决方案:每个模块都定义了Loader 的子类,添加了只路由到__callStatic 的方法。
问题:为了自动完成而添加实际解释的代码是不可接受的(这可以争论,但让我们暂时接受它)。
解决方案:我们不添加任何真正的方法,只在 PHPDoc 中像这样声明方法:
<?php
/**
* @method FooProxy FooProxy()
*/
class BarLoader extends Loader {}
?>
问题:FooProxy 不是静态方法。以下都不是静态的:
<?php
/**
* @static
* @method FooProxy FooProxy()
*/
///////////////
/**
* @static @method A A()
* @method static A A()
* @method A static A()
* @method A A() static
*/
使类抽象没有区别。大约一个小时的谷歌搜索没有找到任何解决方案。主要目标是让 IDE 了解这些功能;拥有正确的 PHPDoc 并不是必须的。
【问题讨论】:
标签: php phpdoc magic-methods