2017-05-24 4 views
0

PhpStormは、指定されたパラメータを持つメソッドの結果を理解することは可能ですか?特定のクラスから呼び出して結果がPHPDocに定義されていると知ることはできますか?例えばPhpStorm docsヒント指定されたメソッドの結果

class demo { 
    public static function getInstance($className) 
    { 
     return $className::Instance(); 
    } 
} 
class someClass { 
    public function Instance() { 
     return new someClass(); 
    } 
} 

class otherClass { 
    public function Instance() { 
     return new otherClass(); 
    } 
} 

demo::getInstance('someClass'); // PHPstorm should understand this would return someClass 
demo::getInstance('otherClass'); // PHPstorm should understand this would return otherClass 

瞬間に私のPhpStormは

メソッドのgetInstance文字列には見られないと言います。

コードヒントについては、パラメータ値に基づいてどのようなクラスが返されるかを理解したいと思います。そのデータをPHPDocなどに入れても問題ありません。追加のメソッドは必要ありません。

+1

- ([高度なメタデータ]を見てみます。https ://confluence.jetbrains.com/display/PhpStorm/PhpStorm+Advanced+Metadata) - これはLaravel IDE Helperの動作方法です(例えば、 – LazyOne

答えて

2

まず、非静的メソッドを静的に呼び出します。

第二に、あなたはこのように、戻り値の型を注意することができます:あなたが渡されたパラメータ(工場/コンテナのいくつかの並べ替え)に基づく方法の種類を返すために必要がある場合は

/** 
* @return someClass|otherClass 
*/ 
public static function getInstance($className) 
{ 
    return $className::Instance(); 
} 
+0

)静的でなければならないことは分かりますが、これは単なる例です。実際のコードでは正しいです。そのような戻り値の型を設定すると、実際に返されるクラスではなく、他のクラスからコードヒントが生成される可能性があります。 – SheperdOfFire

+0

明示的には言及していませんが、PhpStormが '@ return'ステートメントにリストされているすべての可能性を持たずに、返されるクラスの型を知っている方法があるかどうかを尋ねているかもしれないと思います。 'function Instance()'を持つ 'class Foo'は、' 'demo :: getInstance( 'Foo');' 'Foo''が返される型なしでPhpStormに知られていましたか? – gabe3886

+0

@ gabe3886、no。 PhpStormは、すべてのバリアントを提案することしかできません。 PhpStormは私の答えのような自動phpdocを生成します(可能なすべての戻り値の型を列挙します)。 – maximkou

関連する問題