Netbeansに通常の変数の型のヒントを与える方法があるので、興味があるので、intellisenseがそれを取得します。クラスのプロパティ、関数のパラメーター、戻り値の型などに対してそれを行うことができることは知っていますが、通常の変数に対してそれを行う方法はわかりません。これは、異なるオブジェクトタイプ(サービスロケーターなど)を返すことができるメソッドがある場合に本当に役立つものです。
exのようなもの:
/**
* @var Some_Service $someService
*/
$someService = ServiceLocator::locate('someService');
後で$ someServiceを使用する場合、netbeansは、Some_Serviceクラスで定義されているすべての使用可能なメソッドを提供します。
必要なのは1行だけです:
/* @var $varName Type_Name */
NetBeansのこの記事を参照してくださいPHPブログ: https://blogs.Oracle.com/netbeansphp/entry/defining_a_variable_type_in
注:少なくとも、バージョン8.2では。キーは次のようです:
- 単一のアスタリスク(
/*
の代わりに/**
)。- 変数名の後に型を配置します。
- 型ヒントの前後に何もない(空白を除くが、コメントが単一行にない場合でも許可されない)。
これは古い質問であることは知っていますが、Eclipse/Zend Studioで同様の答えを探していたので、これも解決しました。
**ただし、このスタイルで明示的に開閉する単一の行にする必要があることに注意してください...
/* @var $varName Type_Name */
その他の形式は...
/**
* @var $varName Type_Name
*/
または...
// @var $varName Type_Name
まったく機能しているようでした。それが誰かを助けることを願っています。
これらの厄介なmagic変数を文書化しようとしていますか? (私がやった;この質問は、現在Googleでの結果の上位にランクされています。これが誰かの助けになることを願っています!)
@property
タグを使用すると、magicphp変数-__get()
および__set()
を使用して実装されたphp変数を文書化できます。タグは、ドキュメントでクラス定義の直前に使用する必要があります。
/**
* Class Contact
* @property string $firstName
* @property string $lastName
*/
class Contact extends Model {
...
この表記はオートコンプリートをトリガーし、Netbeans 8.1およびPhpStorm 2016.1でテストされています。
Netbeans 8.0.2では、vdocテンプレートで次のことができます。
/* @var $variable type */
ただし、Netbeansはこれを認識せず、オブジェクトの正しいオートコンプリートリストを提供しません。代わりに、変数宣言の直前にこれを使用します:
/** @var objectType $varName */
ストックvdocテンプレート、特にPDOまたはPDOStatementオブジェクトとして使用されるクラス変数の優れた使用法は実際には見たことがありません。
私が使用する解決策の1つは、実際にツール/オプション/エディター/コードテンプレート(PHP言語として選択))に移動し、新しいテンプレートを追加することです。私はhint。次に、拡張テキストの下で、次のテンプレートを使用します。
/** @var ${VAR_TYPE variableFromNextAssignmentType default="ClassName"} $$${VARIABLE variableFromNextAssignmentName default="variable"} */
このバグレポート によると、構文は 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;