Netbeans (PHP)의 변수 유형 힌트


85

netbeans에 일반 변수에 대한 유형 힌트를 제공하는 방법이 있는지 궁금해서 intellisense가이를 선택합니다. 클래스 속성, 함수 매개 변수, 반환 유형 등에 대해 할 수 있다는 것을 알고 있지만 일반 변수에 대해 수행하는 방법을 알 수 없습니다. 서비스 로케이터와 같은 다른 객체 유형을 반환 할 수있는 메서드가있는 상황에서 실제로 도움이 될 것입니다.

예 :

/**
 * @var Some_Service $someService
 */
$someService = ServiceLocator::locate('someService');

나중에 $ someService를 사용하는 경우 netbeans는 Some_Service 클래스에 정의 된 사용 가능한 모든 메서드를 제공합니다.


1
이것은 멤버의 경우 클래스 내에서 작동하지만 함수 또는 절차 코드에서 수행하는 방법을 모르겠습니다.
David Snabel-Caunt

1
이 유형의 주석은 모든 공통 IDE (NEtBeans, Eclipse, ...)에서 작동해야하므로 PHP IDE에서 변수 유형 힌팅으로 이름을 바꾸는 것에 대해 생각 합니다.
shadyyx

답변:


186

한 줄이면 충분합니다.

/* @var $varName Type_Name */

NetBeans PHP 블로그 ( https://blogs.oracle.com/netbeansphp/entry/defining_a_variable_type_in) 에서이 기사를 참조하십시오.

참고 : 최소한 버전 8.2에서는; 핵심은 다음과 같습니다.

  • 단일 별표 ( /*대신 /**).
  • 변수 이름 뒤에 유형을 배치합니다.
  • 유형 힌트 앞뒤에 아무것도 없습니다 (공백 제외, 주석이 한 줄에 있지 않은 경우에도 허용되지 않음).

16
여기서 핵심은 / ** 대신 단일 별표 / * 인 것 같습니다. 적어도 버전 8.0에서는. 감사.
Cypher

1
객체 속성에 대해 vdoc를 $this->obj = $serviceLocator->get('obj');사용해야 /* @var $obj Obj */하는 경우 전혀 작동하지 않는 것 같습니다. 즉 , 내가 사용 하면 작동하지 않는 경우 ...
shadyyx

2
@shadyyx이 경우에 사용해야합니다 /** @var Type_Name */.이 게시물을 참조하십시오 .
사도

6
vdoc문서화 할 변수 위의 줄에 입력 한 다음 Tab눌렀을 때 위의 문서 블록 @johannes 게시물을 자동으로 생성하는 매크로 역할을 할 수 있습니다.
Tom Auger 2015 년

1
NetBeans가 대체 구문도 지원하도록하려면 기능 요청에 대해 의견 / 투표를하십시오. netbeans.org/bugzilla/show_bug.cgi?id=267470
marcovtwout

24

나는 이것이 오래된 질문이라는 것을 알고 있지만 Eclipse / Zend Studio에 대한 유사한 답변을 찾고 있었고 이것도 해결되었습니다.

**이 스타일에서 명시 적으로 열기 및 닫기가있는 단일 행에 있어야합니다.

/* @var $varName Type_Name */

다른 형식 없음 ...

/**
 * @var $varName Type_Name
 */ 

또는...

// @var $varName Type_Name

전혀 작동하는 것 같았습니다. 누군가에게 도움이되기를 바랍니다.


마지막에 나열된 이중 슬래시 방법을 사용하면 NetBeans 7.2에서 작동하지 않았습니다
David

1
@David 잘 읽지 못할 수도 있지만 첫 번째 작품 만 언급했습니다. 둘 다 유효한 주석이기는하지만 둘 다 타입 힌팅 시스템에서 작동하지 않습니다. 적어도 이클립스가 진행되는 한 NetBeans에 대해서는 확실하지 않습니다.
oucil 2013

1
Netbeans (8.01)는 / *를 사용하는 첫 번째 옵션 만 허용하지만 phpStorm (8)은 / **도 지원합니다.
Jop van Raaij

9

성가신 마법 변수 를 문서화하고 싶습니까? (이 질문은 현재 Google에서 가장 높은 순위를 차지하고 있습니다. 도움이 되었기를 바랍니다.)

@property태그를 사용하면 문서화 할 수 있습니다 마법 의 PHP 변수를 - 그 구현 사용 __get()하고 __set(). 태그는 클래스 정의 바로 앞의 문서에서 사용해야합니다.

/**
 * Class Contact
 * @property string $firstName
 * @property string $lastName
 */
class Contact extends Model {
   ...

이 표기법은 Netbeans 8.1 및 PhpStorm 2016.1에서 테스트 된 자동 완성을 트리거합니다.

여기에 이미지 설명 입력


3

이 버그 보고서 에 따르면 NetBeans 9 에서 구문이 변경됩니다 .

/* @var $variable VarType */    // vdoc1 (legacy syntax)
/** @var VarType $variable */   // vdoc (new syntax)

또한 []객체 배열을 나타 내기 위해 클래스 이름에 추가 할 수 있다는 점을 언급 할 가치가 있습니다.

/* @var $foos Foo[] */
$foos = // ...

foreach ($foos as $foo) {
    // $foo will be hinted as Foo here
}

그리고 당신의 use진술을 잊지 마세요.use Foo;


2

netbeans 8.0.2에서 vdoc 템플릿은 다음을 제공합니다.

/* @var $variable type */

그러나 Netbeans는 이것을 인식하지 못하며 개체에 대한 올바른 자동 완성 목록을 제공하지 않습니다. 대신 변수 선언 바로 전에 이것을 사용하십시오.

/** @var objectType $varName */

나는 주식 vdoc 템플릿, 특히 PDO 또는 PDOStatement 개체로 사용될 클래스 변수에 대한 큰 사용을 보지 못했습니다.

내가 사용하는 한 가지 해결책은 실제로 도구 / 옵션 / 편집기 / 코드 템플릿 (언어로 PHP가 선택됨)으로 이동하여 새 템플릿을 추가하는 것입니다. 나는 나의 힌트 라고 불렀다 . 그런 다음 확장 텍스트에서 다음 템플릿을 사용합니다.

/** @var ${VAR_TYPE variableFromNextAssignmentType default="ClassName"} $$${VARIABLE variableFromNextAssignmentName default="variable"} */

3
흠, 저는 NB 8.0.2를 가지고 있고 저에게는 그 반대입니다. / * @var $ variable 유형 * /은 잘 작동합니다. 템플릿에 패치를 사용하려고했습니다. 하지만 작동하지 않았습니다.
userfuser 2010 년

1
이 answe를 처음 게시했을 때 netbeans 사본에서 무슨 일이 벌어 졌는지 정확히 모르겠지만 지금은 8.2를 사용하고 있습니다. / * @var $ varName varType * / 잘 작동합니다.
Mike

0

NetBeans IDE 8.2 구문은 다음과 같습니다.

class foobar{
    /** @var string $myvar: optional description here **/
    protected static $myvar;
}

이것은 적어도 정적 변수에 대한 유형 힌트를 적절하게 제공합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.