2012-01-24 3 views
5

メンテナンスの容易さとIDEクラスの自動補完とメンバヒントの理由から、私は自分のプロジェクトでPHPDocを使用しました。この例のクラスを考える:(必要な場合)上記Netbeansのドキュメントクラスへの適切な方法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; 
    } 
} 

これは私がドキュメントとして持っていることを好むどのような正確には、しかし、NetBeansのオートコンプリートは、それが二回各プロパティを一覧表示して、正常に動作しません。たとえば、$my_class_object->iと入力すると、自動完成では2つの$ idプロパティが表示されます:1つは私のPHPDocに記述されていて、もう1つは "PHPDocが見つかりません"という不明な変数です。

Netbeansの問題を解決するソリューションがあります。それぞれのプロパティの上に@var PHPDocブロックを追加していますが、私のクラスを不必要に混乱させてしまいます。

私の問題(クリーンドック、適切なNetbeansヒント)の両方に[良い]解決策がありますか、これについて間違っていますか?

答えて

6

「プロパティ」タグは、実際にコード自体には表示されません。そのいずれかを意味し、「魔法」の特性のために具体的かつ明確です。これがタグがクラスdocblockでのみ発生する主な理由です。そのように、私は "プロパティ"タグを認識するIDEを推測しています。それは "コードでは見られません"という観点からです。確かに、私はオートコンプリートがそのような不動産の存在を認識し、それを利用できるようにするという期待を理解することができました。しかし、私の賭けは、IDEがモデルを構築するためにコード自体を使用することに固執し、コード内にすでに見られる要素を補うためにのみdocblock情報を使用することです。

「コード」プロパティを文書化する適切な方法の1つは、「var」タグを使用することです。あなたはすべてのプロパティにそのタグを使用するために必要な行を最小限にしたい場合は、1行のdocblockを使用します。また

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

を、あなたはにdocblock、タグの類似性を削減するためのDocblockテンプレートを使用することができますあなたのコードに合う:この短いリストに多くの貯蓄のように見えるしていませんが、プロパティがたくさんあるとき、それは助けない

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

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

。また、メソッドの周りでうまく動作します。

+1

docblockテンプレートは認識しませんでしたが、変数の使用について追加のコメントを付ける必要があることもありますが、これはコードの整理に役立ちます。ありがとう! – Mattygabe

+0

docblockテンプレートと実際のdocblockを組み合わせると、テンプレートの情報が個々のdocblockに "追加"されます。上記の例では、特定のdocblockを$ idに、別のdocblockを$ numberに置くことができます。共有varタグではなく他の情報を使用します。結果のドキュメントでは、両方の変数がintデータ型を取得します。 – ashnazg

3

各プロパティの上に@varを使用し、@propertyをまったく使用しないことをお勧めします。私はこれにより、あなたがコメントをコメントにしているものにもっと密接に関連付けることができると感じています。つまり、プロパティのコメントは常にプロパティのすぐ隣にあります。 @propertyスタイルを使用していて、大量のプロパティを持つ大きなクラスを持っている場合、プロパティを記述するコメントはページから離れている可能性があります。

+0

明らかに、少なくともNetbeansの開発者によると、それはPHPDocの正しい使い方です - @propertyは "個人的な、保護された、または存在しない変数"ですが、私が作成したバグレポートで指摘したように、クラス外でこれらの変数を暗示することはできません。 – Mattygabe

1

正確な構文についてはわかりませんが、netbeansは標準のPHPドキュメントを遵守すると確信しています。

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

+0

私が上にまとめたサンプルクラスは、ほぼ正確にPHPDocのドキュメントが@propertyの使い方を説明しているようです。 Netbeansの開発者がこの矛盾を認識しているかどうかを調べる必要があります。 – Mattygabe