一尘不染

如何为IDE记录魔术(_call和_callStatic)方法

php

在用记事本++和sublime进行了许多幸福的编码之后,建议我尝试使用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仅选择了这些语句中的第一个。此外,我只能将返回类型设置为Mixed,因为我希望能够将其设置为被调用的任何类(在我的示例中为b)。

任何想法或建议都会非常感激,谢谢。


阅读 320

收藏
2020-05-29

共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

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


另外一种方法 :(当然是在PhpStorm中)Settings | Inspections | PHP | Undefined | Undefined method --> Downgrade severity if __magic methods are present in class-它不会以任何方式帮助此类方法的代码完成,但是不会将那些魔术方法标记为“未定义方法”错误。


phpDocumentor的 关于@property/ @method标签使用RegEx /部分名称 的票据
(如何处理文档以及在处理代码完成时对实际IDE的帮助很少):

2020-05-29