如何记录魔术(_call和_callStatic)为IDE的方法(How to document m

2019-07-23 11:16发布

经过许多快乐时光在记事本++和崇高的编码,我已经被告知给一个PHP IDE一展身手。 我想出去phpStorm,似乎不错。 代码完成和文档是一个伟大的功能,但在使用魔法的方法对我来说是不工作的。 有没有解决办法得到phpStorm明白发生了什么魔法的方法呢?

我们的情况是这样的:

abstract class a {
    public static function __callStatic($method,$args)
    {
        if(strpos($method,"get_by_") === 0)
        {
            //do stuff
        } elseif(strpos($method,"get_first_by_") === 0) {
            //do stuff
        } elseif($method == "get_all") {
            //do stuff
        }
    }
}

class b extends a {
    // some more stuff
}

b::get_by_user_id(27);
b::get_first_by_id(156);
b::get_all();

魔术callStatic方法允许我们通过1个或多个参数构成的函数调用获取对象的集合。

我看到有在这些情况下,使用@method语句,但phpStorm只是拿起第一这些语句。 此外,我可以返回类型设置为仅混合在那里,我宁愿要能够将其设置为任何类这被称为上(在我的例子B)。

任何意见或建议,将非常感激地收到,谢谢。

Answer 1:

使用类级别PHPDoc的评论-特别@method标签-在PhpStorm正常工作:

/**
 * @method static someClass get_by_user_id(int $id) Bla-bla
 * @method static someClass get_first_by_id(int $id) 
 */
abstract class a {
...

在上面:

  • @method - PHPDoc的标签
  • static -告诉,这是静态方法
  • someClass$this -返回类型
  • get_by_user_id -方法名
  • (int $id) -方法签名: ([[type] [parameter]<, ...>])
  • Bla-bla -一些可选的说明

更多关于@method

  • http://www.phpdoc.org/docs/latest/references/phpdoc/tags/method.html
  • https://github.com/phpDocumentor/phpDocumentor2/blob/develop/docs/PSR.md#711-method

PS虽然@method static在PhpStorm工作正常通过实际的phpDocumentor工具支持(IDE告诉该方法是静态的),它可能不(没?)(抱歉,没有使用过了一段时间)。


或者 :(在PhpStorm,当然) Settings | Inspections | PHP | Undefined | Undefined method --> Downgrade severity if __magic methods are present in class Settings | Inspections | PHP | Undefined | Undefined method --> Downgrade severity if __magic methods are present in class Settings | Inspections | PHP | Undefined | Undefined method --> Downgrade severity if __magic methods are present in class -它不会与代码完成以任何方式方法有所帮助,但不会标记那些神奇的方法为“未定义的方法”的错误。


phpDocumentor的的使用正则表达式/部分名称关于车票 @property / @method标签(怎么会这样的文档资料和帮助,我很少与代码完成交易时,可能会带来实际的IDE很有用):

  • https://github.com/phpDocumentor/phpDocumentor2/issues/689


Answer 2:

多少与原来的问题:

您还可以在phpstorm元文件进行定义。 下面是工厂方法(v2016.3)的例子:

// Define in .phpstorm.meta.php
namespace PHPSTORM_META {
    $STATIC_METHOD_TYPES = [
        \Factory::create('') => [],
    ];
}

// Then use in code
$factory = new \Factory();
$user = $factory->create(\User::class);
// Here you get autocomplete.
$user->subscribe();

这样,您就不必在魔术发生的docblock每一种可能性。

有一些文档的详细信息。



文章来源: How to document magic (_call and _callStatic) methods for IDEs