2011-10-22 17 views
16

私はPHPをかなり使い慣れていて、NetBeansを使ってPHPコードを開発し始めました。PHP変数の型をコメントに宣言するのはなぜですか?

青色のうち、クエリで変数を入力すると、ダイアログが表示され、変数タイプを保持するコメントを入力するように求められました。私はいくつかの調査を行い、これがNetBeansの一般的な機能であると思われるが、私に説明する情報が見つからなかったなぜこれがそうだったか。

なぜ誰かがコメントにPHP変数の型を入れたいのですか?開発用か、実際にコード自体に利益をもたらすのでしょうか?それは不可欠か、オプションか?

+0

あなたは何を意味するのかの例を投稿できますか? –

+0

@AurelioDeRosa - 機能を説明するページへのリンクは次のとおりです。http://blogs.oracle.com/netbeansphp/entry/defining_variable_type_in_a – stefmikhail

+0

ああ...あなたが何を意味したのか分かりました。まあ、ジョナサン・スプーナーの答えは正しいものです。 –

答えて

28

メソッドのコメント内に@varタグを追加すると、NetBeansでコード補完が表示されます。もちろんこれはオプションですが、コードを完全に文書化することは常に良い考えです。

編集: NetBeansでコメントを自動生成するヒントは、/**拡張を使用することです。これを行うには、文書化するプロパティまたはメソッドの上にカーソルを置き、/**と入力してENTERキーを押します。 phpDocスタイルのコメントが展開され、適切なタグが追加されます。

編集2: あなたが財産に@varタグを使用することができますし、メソッドに渡されたパラメータと同じ効果を達成するための方法に@paramタグを使用することができます。使用している間法上の@paramタグの

/** 
* 
* @var My_Type 
*/ 
private $_myProperty; 

使用すると、あなたのコードヒントを与える:それが表示されている任意の場所プロパティを使用しながら、財産上の@varタグがあなたのコードヒントを与えるの

使用メソッド内のパラメータ:

/** 
* 
* @param My_Type $obj 
*/ 
public function myMethod($obj) { 

} 

また、型の安全性のささやかを提供しながら、同様の効果を達成するための別の方法は、PHPのtype hintingメカニズムを使用することです。

public function myMethod(My_Type $obj) { 

} 

このメソッドは、メソッドのシグネチャで指定された型を持つことに注意してください。 @paramタグを使用して使用できるメソッド内で同じコード補完を提供するようになり、メソッドに渡された型が指定された型と異なる場合、PHPはE_RECOVERABLE_ERRORを生成します。上記のエラーについてもっと知りたい場合は、PHP's documentation regarding errorsを参照してください。

+0

私の場合、 '$ clause'という名前の変数を持っていますが、' gettype($ clause) 'を使って型が' string'であることを知っていますが、NetBeansのオートコンプリートにはオプションとして 'string' 。 NetBeansでは別名になっていますか?私の場合の構文の例を教えてください。 – stefmikhail

+0

varタグは、php libに含まれるユーザー定義の型またはクラスのコード補完のみをサポートします。ヒントの編集を参照してください –

+0

ありがとうございますが、私はまだ私の変数の型を選択する際に問題があります。変数のタイプを記述できるどこかのドキュメントはありますか? NetBeansで利用できるすべてのオプションは、私にとっては外国のものであり、どちらを選択するかはわかりません。私が言ったように、 'gettype'を使って' $ clause'の変数型を 'string'として探しました。しかし、オプションとして 'string'型はありません。間違った方法を使っていますか? – stefmikhail

1

PHPはルーズ/ダック型言語なので、大きなプログラムを作成すると、そのタイプヒントが問題の発生時に何が起こっているのかを理解するのに役立ちます。たとえば、混合型が予想され、整数が送信されます。

+0

http://php.net/manual/en/language.oop5.typehinting.php –

9

私はあなたがそのようなことを話していると思います:

/** 
* @var SimpleXMLElement $xml 
*/ 
private $xml; 

は、これがそうphpDoc commentと呼ばれています。 APIドキュメント(like this one for instance)を生成することができます。さらに、EclipseやNetBeansを含むほとんどのIDEもその構文をサポートし、動的コード補完などを提供します。NetBeansのにもかかわらず

2

は、それは多くの場合、あなたのコードを文書化するために有用である自動補完のためにそれを使用します。

この場合、あなたは、この方法が得るものを知っているとそれが返されますが、コード内であなたが

を何が起こっているか見当がつかない
/** 
* Returns some stuff 
* @param string $someObj 
* @return array 
*/ 
public function someMethod($someObj) { 
    $factoredObj = getObject($someObj); //you are not sure what type it returns 
    $resultArray = $factoredObj->toArray(); 
    return $resultArray; 
} 

あなたは、コード内/* @var $variable type */でそれをコメントすることができ

/** 
* Returns some stuff 
* @param string $someObj 
* @return array 
*/ 
public function someMethod($someObj) { 
    /* @var $factoredObj someType */ 
    $factoredObj = getObject($someObj); 
    $resultArray = $factoredObj->toArray(); 
    return $resultArray; 
} 

または

$factoredObj = getObject($someObj); /* @var $factoredObj someType */ 
7

変数がクラスプロパティではなく、いくつかの戻り値を保持する変数の場合に変数の型を宣言したい場合は、シングルスターコメントの後に@varと変数最後にその変数の型が続きます。たとえば:

/* @var $errorMessage NotificationMessage */ 
$errorMessage= $allMessages->rewind()->current(); 

は、NetBeansを教えてくれたりPhpStorm $にErrorMessageがNotificationMessageのインスタンスであること、そしてあなたは、その変数のコード補完を取得する必要があります。

+1

これはPHPStormでも動作します。 – Buffalo

関連する問題