programing

IDE의 매직(_call 및 _callStatic) 메서드를 문서화하는 방법

sourcetip 2022. 10. 18. 22:21
반응형

IDE의 매직(_call 및 _callStatic) 메서드를 문서화하는 방법

메모장++와 숭고함으로 코딩하는 행복한 세월을 보낸 후, 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();

magic callStatic 메서드를 사용하면 함수 호출을 구성하는1개 이상의 인수를 통해 오브젝트 컬렉션을 얻을 수 있습니다.

이러한 경우에 사용하는 @method 문이 있는 것을 알 수 있습니다만, phpStorm은 이러한 문 중 첫 번째 문만 선택합니다.또한 반환 타입은 mixed로 설정할 수 있습니다.이 클래스는 어떤 클래스(예에서는 b)로 설정할 수 있으면 좋겠습니다.

어떤 아이디어나 제안도 매우 감사하게 받아들여질 것입니다, 감사합니다.

클래스 레벨의 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-- PPDoc 태그
  • static--이것은 스태틱 방식임을 나타냅니다.
  • someClass또는$this-- 리턴 타입
  • get_by_user_id-- 메서드명
  • (int $id)-- 메서드 시그니처:([[type] [parameter]<, ...>])
  • Bla-bla-- 일부 옵션 설명

상세 정보@method:

추신: while@method staticPhpStorm에서는 정상적으로 동작합니다(IDE에서는 메서드가 스태틱하다고 합니다).실제 php Documentor 툴에서는 지원되지 않을 수 있습니다(죄송합니다만, 한동안 사용하지 않았습니다).


또는 (물론 PhpStorm에서)Settings | Inspections | PHP | Undefined | Undefined method --> Downgrade severity if __magic methods are present in class-- 이러한 메서드의 코드 완성에는 전혀 도움이 되지 않지만, 이러한 매직 메서드를 「메시지」에러라고 마크 하는 일은 없습니다.


phpDocumentor의 RegEx/partial name 사용에 관한 티켓@property/@method태그(문서에 도움이 되는 방법 및 코드 완성 시 실제 IDE에 대한 도움이 거의 없음):

원래 질문과 다소 관련이 있습니다.

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();

이렇게 하면 마법이 일어났을 때 모든 가능성을 문서화할 필요가 없습니다.

자세한 내용은 문서를 참조하십시오.

언급URL : https://stackoverflow.com/questions/15634021/how-to-document-magic-call-and-callstatic-methods-for-ides

반응형