Netbeans(PHP)での変数型ヒント


85

NetBeansに通常の変数の型ヒントを与える方法があるかどうかだけ知りたいので、インテリセンスがそれを取得します。クラスプロパティ、関数パラメーター、戻り値の型などに対して実行できることは知っていますが、通常の変数に対して実行する方法がわかりません。これは、さまざまなオブジェクトタイプ(サービスロケーターなど)を返すことができるメソッドがある場合に非常に役立ちます。

exのようなもの:

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

後で$ someServiceを使用する場合、netbeansはSome_Serviceクラスで定義されている使用可能なすべてのメソッドを提供します。


1
これはメンバーのクラス内で機能しますが、関数や手続き型コードでそれを行う方法がわかりません。
David Snabel-Caunt 2009年

1
このタイプのコメントはすべての一般的なIDE(NEtBeans、Eclipseなど)で機能するはずなので、これをPHPIDEの変数タイプヒントに名前変更することを検討します。
shadyyx 2013年

回答:


186

必要なのは1行だけです。

/* @var $varName Type_Name */

NetBeans PHPブログのこの記事を参照してください:https//blogs.oracle.com/netbeansphp/entry/defining_a_variable_type_in

注:少なくとも、バージョン8.2では; 重要なのは次のようです。

  • 単一のアスタリスク(の/*代わりに/**)。
  • 変数名の後に型を配置します。
  • タイプヒントの前後には何もありません(空白を除きますが、コメントが1行にない場合はそれでも許可されません)。

16
ここで重要なのは、/ **ではなく単一のアスタリスク/ *のようです。少なくとも、バージョン8.0では。ありがとう。
サイファー2014年

1
オブジェクトプロパティにvdocを使用する必要がある場合、つまり$this->obj = $serviceLocator->get('obj');使用し/* @var $obj Obj */ても機能しない場合は、まったく機能しないようです...
shadyyx 2015

2
@shadyyxこの場合/** @var Type_Name */、使用する必要があります、この投稿を参照してください?
使徒

6
vdocドキュメント化する変数の上の行に入力してからヒットTabすると、マクロとして機能して、上記のドキュメントブロック@johannesの投稿が自動的に作成されることに注意してください。
トム・オージェ

1
NetBeansで代替構文もサポートする場合は、機能要求にコメント/投票してください:netbeans.org/bugzilla/show_bug.cgi
id =

24

これは古い質問だと思いますが、Eclipse / Zend Studioについても同様の答えを探していたので、これで解決しました。

**ただし、このスタイルでは、開始と終了が明示的に1行になっている必要があることに注意してください...

/* @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 2014年

9

あなたはそれらの厄介な魔法の変数を文書化しようとしていますか?(私はそうしました;この質問は現在グーグルでそれのトップの結果にランクされています。これが誰かに役立つことを願っています!)

この@propertyタグを使用すると、魔法のphp変数(__get()とを使用して実装された変数)を文書化できます__set()。タグは、クラス定義の直前のドキュメントで使用する必要があります。

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

この表記はオートコンプリートをトリガーし、Netbeans8.1およびPhpStorm2016.1でテストされています。

ここに画像の説明を入力してください


3

このバグレポートによると、NetBeans9では構文が変更されます。

/* @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 */

特に、PDOまたはPDOStatementオブジェクトとして使用されるクラス変数の場合、ストックvdocテンプレートの優れた使用法はあまり見ていません。

私が使用する解決策の1つは、実際にはツール/オプション/エディター/コードテンプレート(言語としてPHPを選択)に移動し、新しいテンプレートを追加することです。私は私のヒントを呼んだ。次に、[展開されたテキスト]で、次のテンプレートを使用します。

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

3
うーん、私はNB 8.0.2を持っていますが、私にとってはその逆です。/ * @var $ variable type * /は正常に機能します。テンプレートにパッチを使用しようとしました。しかし、それは機能しませんでした。
userfuser 2015年

1
この回答を最初に投稿したとき、NetBeansのコピーで何が起こっていたのか正確にはわかりませんが、現在は8.2を使用しています。/ * @var $ varName varType * /は問題なく動作します。
マイク

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.