2013-01-08 14 views
8

私はPHPコード内の典型的な工場のパターンを考えてみましょう:コード補完とファクトリパターン

abstract class Model 
{ 
    function m() 
    { 
    } 
} 

class model_A 
{ 
    function a() 
    { 
    } 
} 

class model_B 
{ 
    function b() 
    { 
    } 
} 

function modelFactory($name) 
{ 
    $className = 'model_' . $name; 
    $object = new $className(); 
    // ... do some magic stuff ... 
    return $object; 
} 

私は@varや@return phpdocのタグについて知っているが、後ので、任意の魔法の方法があります

$x = modelFactory('A'); 

Eclipseは$ xがmodel_Aのインスタンスであることを知っていますか?

私はどこかにこのような文字列の固定ベクタ定義することができます:コード補完を処理する前にメモリに交換するEclipse用の

"modelFactory('A')" => "new model_A()" 
"modelFactory('B')" => "new model_B()" 

を。

+2

なぜこれが欲しいですか?ファクトリは "類似の"オブジェクトを返さなければなりません。同じインターフェースを実装するか、同じスーパークラスを拡張します。 – atomman

+0

はい私は例を超簡単にしたいと思った。私は今編集してスーパークラスを追加しました。私はmodelFactoryの上に@returnモデルを追加することができますが、$ xのメソッドヒントとしてm()とa()を取得することも可能です – fsw

+0

:私のプロジェクトの大部分は工場パターンとコード補完が不足していますこれが不可能な場合は、私はそれをリファクタリングする必要があります迷惑な。 – fsw

答えて

0

私は長年3+ほとんどからEclipseとPDTを使用していますが、私はZendのメーカー9は、コード補完のために、それはPDTよりもはるかに優れている、あなたの問題を解決することができると思うあなたの質問

のための完璧な答えを持っていけません。

http://www.zend.com/en/products/studio/downloads

+0

ええと、私はZendを試してみることができます。しかし、なぜそれが処理されると思いますか?彼らはまた、工場モデルhttp://forums.zend.com/viewtopic.php?f=59&t=5454のために@varを推奨していますので、これには魔法の方法もありません。 – fsw

1

短い答えは、これはあなたがそれを望む方法では不可能です。

あなたはすでに合法エディタが手動で、それ自体で

理論的には可能であるがをプログラミングパターンの概念を理解することは不可能ですので、あなたは、コード補完の良さを実現するために、手動で@varを使用する必要があります別のコメントで指摘してきたように型推論のためのオーサリング規則はちょうど逆のimho(DocBlock記法自体に必要な変更はもちろん)と思われます。

0

現在、私はどちらかこれを行うIDE /エディタを認識してないんだけど、私は(彼らは現在、それを「作業」している)PhpStormについて同じ機能を追跡しています: http://youtrack.jetbrains.com/issue/WI-6027

1

これをサポートする唯一のIDEはPHPStormです(.phpstorm.meta.phpファイル経由)。

私はこれをサポートする機能要求を提出しました。 あなたはhttps://bugs.eclipse.org/bugs/show_bug.cgi?id=463110に投票できます。

関連する問題