2016-11-01 4 views
4

PHP 프로젝트에서 Laravel ORM을 사용하고 코드에서 동적 인 부분을 많이 사용합니다. 예 :PhpStorm 정적 메서드 코드 완성

UserModel::whereName('Foo')->whereGender(1)->first(); 

내가 PhpStorm 2016.1를 사용할 때 (내가 생각하는) 나는 whereName와 코드 완성하고 다음을 수행하여 다음과 같은 whereGender 가지고 클래스 UserModel로하는 PHPDoc 문자열을 추가 할 수 있습니다

/** 
* class UserModel 
* @method static $this whereName($val) 
* @method static $this whereGender($val) 
*/ 
class UserModel { 
....... 
} 

하지만 이후를 PhpStorm 2016.2.2의 최신 버전으로 업그레이드하십시오. 두 번째 방법 whereGender은 코드 완성 목록에 나타나지 않습니다. JetBrains 웹 사이트에서 2016.2의 새로운 기능을 발견했습니다.

static 메소드는 완료 목록에서 필터링되어 필터링됩니다.

내 질문은 : PhpStorm가 whereName 호출 후 완료 whereGender을 줄 수 있도록하는 방법은 무엇입니까?

갱신 :

완료 정적 메서드를 얻기 위해 두 번 호출해야합니다. https://youtrack.jetbrains.com/issue/WI-9403#comment=27-1490430

+0

흠 이상한. 내 2016.2.2 문제가 없습니다 –

+0

이 방법을 테스트하지는 않지만 코드 완성을 승인하기 위해 github 레포를 사용할 수 있다고 생각합니다. https://github.com/barryvdh/laravel-ide-helper –

+0

@LionelChan UserModel의 동일한 클래스 파일에서 완료를 테스트 하시겠습니까? UserModel에서 메서드를 코딩 할 때 원하는 것을 얻을 수 있지만 다른 파일에 코드를 쓸 때 실패합니다. – amow

답변

2

TL; DR :

당신이 ->를 입력 한 후, 당신은 정적 인 방법과 전체 완성 목록을 볼 수 CTRL + SPACE을 눌러야, 완료를 참조하십시오. 이것에 대한 실제 사용 사례가 있지만 방법 정적/비 정적이 아닌 호출

Preferences->Keymap: 
Main Menu->Code->Completion->Basic 

: 당신이 맥에있는 그것은 언어 전환과 충돌하는 경우에 키 콤보를 변경 https://blog.jetbrains.com/phpstorm/2016/07/completion-changes-in-phpstorm/

다음 완료 변경 완료가 $this->의 컨텍스트에서 호출 될 때 완성리스트에서 정적 메소드를 제거 하였다 : 여기에서 언급 한 바와 같이 일반적인 따라서 phpstorm, 그것은 떨어졌다. 이 변경은 몇 년 전에 사용자가 열어 티켓의 결과로 발생했습니다. $this->을 사용하여 정적 메서드를 호출하는 것은 전적으로 유효한 유스 케이스이지만 PHP에서 널리 사용되는 것은 아닙니다. 당시로서는 이것이 좋은 생각 인 것 같았지만, PHPUnit에서 서술을하는 것은 의도하지 않은 결과를 낳았습니다.

그래서 phpdoc을 작성하는 방법에 관계없이 phpstorm은 "첫 번째 호출"에서 인스턴스 메소드로 정적 메소드를 표시하지 않습니다. CTRL + Space를 사용하여 다시 수동으로 호출하여이를 확인해야합니다. 그래서 이것은 "두 번째 호출"이 의미하는 것입니다.

출처 :