2012-01-26 9 views
1

私はIDEとしてNetBeansを使用しています。私は、オブジェクトを返すために別の関数(通常は工場出荷時)を使用するいくつかのコードを持っているときはいつでも、一般的に私はヒンティングを支援するために次の操作を行うことができます。

/* @var $object FooClass */ 
$object = $someFunction->get('BarContext.FooClass'); 
$object-> // now will produce property and function hints for FooClass. 

しかし、私はそのクラスを格納するオブジェクトのプロパティを使用する際に、私はtrying to use @var $this->foo or @var fooが通過ヒンティングを運ぶないだろうと、同じことを行うにはどのように損失のビットでよ:

use Path\To\FooClass; 

class Bar 
{ 
    protected $foo; 

    public function bat() 
    { 
     $this->foo = FactoryClass::get('Foo'); // Returns an instance of FooClass 

     $this->foo //does not have hinting in IDE 
    } 
} 

私はクラスのためのdocblockにしようとした、またはprotected $foo場合や、上記のインラインコメントを使用していますfooはインスタンスに設定されます。

私がこれまでに発見した唯一の回避策は、以下のとおりです。私は本当にヒントは、他の多くの機能が潜在的に$this->fooを使用することができます、しかし、クラス全体も持ちたい、とクラスのメソッドを知っているだろう

public function bat() 
{ 
    $this->foo = FactoryClass::get('Foo'); 

    /* @var $extraVariable FooClass */ 
    $extraVariable = $this->foo; 

    $extraVariable-> // now has hinting. 
} 

特性が有用である。

きっともっと簡単な方法があります...私はそれがNetBeansでどのように機能するか

答えて

5

を言うことはできませんが、PHPEclipseで、あなたは変数自体の宣言にヒントを追加します。

use Path\To\FooClass; 

class Bar 
{ 
    /** 
    * @var FooClass 
    */ 
    protected $foo; 

    public function bat() 
    { 
     $this->foo = FactoryClass::get('Foo'); // Returns an instance of FooClass 

     $this->foo // should now have hinting 
    } 
} 
+1

@Nick NetBeansのオブジェクトプロパティでは、変数名はなく、 '@ var'と型だけが書かれ​​ています。 –

+0

はい!素晴らしい!ありがとうございました。 '@var FooClass'は完全に動作します。 – Nick

1

class Bar 
{ 
    protected $foo; 

    public function bat() 
    { 
     $this->foo = FactoryClass::get('Foo'); // Returns an instance of FooClass 

     $this->foo //does not have hinting in IDE 
    } 
} 

考えるとIDEは、おそらく何のDocblock戻り値の型を持っていないFactoryClass::getからdeclaraionを取得しようとしています。問題は、このファクトリメソッドが任意の数のクラスを返すことができる場合、あなたの回避策を使用する以外にはあまりできないことです。

それ以外の場合は、FactoryClass::get('Foo')またはFactoryClass::get('Bar')の違いはわかりません。これらの2つの呼び出しは、さまざまな種類のオブジェクトを返す可能性が最も高いからです。

関連する問題