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
:
- https://docs.phpdoc.org/latest/references/phpdoc/tags/method.html
- https://github.com/phpDocumentor/phpDocumentor2/blob/develop/docs/PSR.md#711-method
추신: while@method static
PhpStorm에서는 정상적으로 동작합니다(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
'programing' 카테고리의 다른 글
별도의 CREATE TABLE 없이 SELECT 문에 임시 테이블을 만듭니다. (0) | 2022.10.18 |
---|---|
vue 프로젝트에서 이미지를 사전 로드하는 방법 (0) | 2022.10.18 |
PHP cURL이 작동하지 않음 - Windows 7 64비트에서의 WAMP (0) | 2022.10.18 |
스트림을 열지 못했습니다.HTTP 래퍼에서는 쓰기 가능한 연결이 지원되지 않습니다. (0) | 2022.10.18 |
Vue 3에서 Vuex를 사용할 수 없음 (0) | 2022.10.08 |