PHPDoc 和 __callStatic

标签 php phpdoc magic-methods

tl;dr

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

动机

如果您想了解更大的图景,这就是我如何回答这个问题的。

问题:在我当前的项目中,我们有大量的类实际上应该是单例(数据库代理等)。不用说,我们至少有几百行 require_once$foo = new FooProxy(); 行。

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

问题:这种方式在团队中使用的任何一个 IDE 中显然都没有类型提示。

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

问题:为了自动完成而添加实际解释的代码是 Not Acceptable (这可能会有争议,但让我们暂时接受它)。

解决方案:我们不添加任何实际方法,只在 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 并不是必需的。

最佳答案

好吧,PhpStorm 3.0 会接受

@method static type name() description

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

关于PHPDoc 和 __callStatic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5982312/

相关文章:

php - 从 MYSQL 点转换为 Swift CLLocationCoordinate2D

php - 从 PHP 登录页面选择要登录的数据库

php - 如何通过 Adob​​e Muse 生成的 CSS 运行 PHP

php - 使用 Doxygen 或 PHPDoc 记录获取/发布参数

php 文件在本地服务器上正常工作,但在在线服务器上时失败

Notepad++ 中的 PHPDoc 注释?

php - 如何在 PHPDoc 中提及属性?

python - 反射(reflect)大于魔术方法

PHP 将样式表添加到标题

python - __new__ 方法给出错误对象。__new__() 只需要一个参数(要实例化的类型)