2012-01-24 1 views
5

유지 관리의 용이성과 IDE 클래스 자동 완성 및 멤버 힌트 때문에 필자는 프로젝트에서 PHPDoc을 사용했습니다. 이 예제 클래스를 감안할 때 :넷빈즈의 적절한 문서 클래스 PHP

class my_class { 
    public $id; 
    public $name; 
    public $number; 

    public function __construct() { 
     //Do something 
    } 

    public function Rename($name) { 
     $this->name = $name; 
    } 
} 

내가 (필요한 경우) 방법에 대한 문서를 배치 한 후 클래스 선언 위에있는 클래스 문서 자체와 모든 속성 ($id, $name$number)를 문서화하는 것을 선호하고, 것입니다 위 각 방법. 여기에 내가 궁극적으로 내 수업을 같이 할 것입니다 :

/** 
* Represents an example class for Stackoverflow 
* 
* @property int $id The id of the object 
* @property string $name The name of the object 
* @property int $number The number of the object 
*/ 
class my_class { 
    public $id; 
    public $name; 
    public $number; 

    public function __construct() { 
     //Do something 
    } 

    /** 
    * Renames the object 
    * @param string $name Name to rename object 
    */ 
    public function Rename($name) { 
     $this->name = $name; 
    } 
} 

이 나는 ​​문서로 선호 정확히 무엇이다, 그러나 넷빈즈 '자동 완성은 두 번 각 속성을 나열으로, 제대로 작동되지 않습니다. 예를 들어, $my_class_object->i을 입력하기 시작하면 자동 완성은 두 개의 $ id 속성을 나열합니다. 하나는 내 PHPDoc에 설명되어 있고 다른 하나는 "PHPDoc을 찾을 수 없음"과 함께 알 수없는 변수로 설명됩니다.

는 넷빈즈 문제를 해결하기 위해 작동하는 솔루션이있다 - 그러나 내가 불필요하게 클러까지 우리 반을, 10 개 + 특성을 가지고 내 수업 특히 일부 그것을 생각, 각 속성 위에 @var하는 PHPDoc 블록을 추가합니다.

내 문제 (깨끗한 의사, 적절한 Netbeans 힌트) 모두에 대한 [좋은] 해결책이 있습니까, 아니면이 문제에 대해 잘못 설명합니까?

답변

6

은 "부동산"태그가 실제로 코드 자체에 표시되지 않는 어떠한 의미 "마법"속성을 위해 특별히 명시 적입니다. 이것이 태그가 클래스 docblock에서만 발생하는 주요 이유입니다. 따라서 "속성"태그를 인식하는 IDE는 "코드에서 볼 수없는"관점에서이를 수행합니다. Autocomplete가 이러한 속성의 존재를 인식하고이를 사용할 수 있도록해야한다는 기대를 이해할 수있었습니다. 그러나 IDE는 코드 작성만으로 모델을 작성하고 코드에서 이미 볼 수있는 요소를 보완하는 데만 docblock 정보를 사용합니다.

"코드"속성을 문서화하는 올바른 방법 중 하나는 "var"태그를 사용하는 것입니다. 당신이 모든 속성에 해당 태그를 사용하기 위해 필요한 라인을 최소화하려면, 한 줄 docblock 사용 또한

/** @var int */ 
public $id; 

을, 당신은 docblocks, 태그 유사성을 줄이기 위해 docblock 템플릿을 사용할 수 있습니다 귀하의 코드에 맞는 :

/** @var string */ 
public $name; 

/**#@+ @var int */ 
public $id; 
public $number; 
/**#@-*/ 

이 짧은 목록에는 많은 절약 효과가있는 것은 아니지만 많은 속성이있는 경우 도움이됩니다. 또한 메서드 주위에서 잘 작동합니다.

+1

docblock 템플릿을 인식하지 못했습니다. 때때로 변수 사용에 대한 추가 의견을 제시해야 할 필요가 있습니다. 이는 자동 완성 기능을 유지하면서 코드를 잘 문서화하는 데 도움이 될 것입니다. 감사! – Mattygabe

+0

docblock 템플릿을 실제 docblock과 결합하여 템플릿의 정보를 개별 docbl에 "추가"할 수 있습니다. 위의 예에서, $ id에는 특정 docblock을, shared var 태그보다는 다른 정보와 함께 $ number에 다른 docblock을 넣을 수 있습니다. 결과 문서에서 두 변수 모두 int 데이터 유형을 선택합니다. – ashnazg

3

각 속성 위에 @var를 사용하고 @property를 전혀 사용하지 않는 것이 좋습니다. 나는 이것이 당신이 주석과 관련된 내용과 더 밀접하게 연관시킬 수 있다고 느낀다. 즉, 부동산에 대한 의견은 항상 부동산 옆에 있습니다. @property 스타일을 사용하고 있고 많은 속성을 가진 큰 클래스가 있다면 속성을 설명하는 주석이 페이지를 벗어난 것일 가능성이 큽니다.

+0

분명히 적어도 Netbeans 개발자에 따르면, PHPDoc의 올바른 사용법입니다 - @property는 "개인, 보호되었거나 존재하지 않는 변수"이지만, 내가 작성한 버그 보고서에서 지적했듯이 Netbeans은 반원들 앞에서이 변수들을 암시하지 않아야한다. – Mattygabe

1

정확한 구문에 대해서는 잘 모르겠지만 netbeans은 표준 PHP 문서를 준수 할 것이라고 확신합니다.

http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_tags.pkg.html http://www.phpdoc.org/

+0

위에서 설명한 예제 클래스는 PHPDoc 문서가 @property 사용법을 설명하는 것과 거의 같습니다. Netbeans 개발자가이 불일치에 대해 알고 있거나 신경 쓰는지 알아보기 시작해야 할 것입니다. – Mattygabe