2017-10-20 8 views
0
class A 
{ 
    public function method1() {} 
    public function method2() {} 
} 

class B 
{ 
    public function method1() {} 
    public function method3() {} 
} 

class Factory 
{ 
    public static function create($className) 
    { 
     return new $className(); 
    } 
} 

、今、私はそれを使用しよう:PHP、工場メソッドのコード補完?

Factory::create('A')-> 
Factory::create('B')-> 

井出文句を言わないのいずれかの方法を列挙し、私はappropiateのはphpdocを追加傾けます。コルスの 私はいつもそれをラップすることができます:

/** 
* @return A 
*/ 
public static function createA() 
{ 
    return new A(); 
} 

が、私はこれらのトンを持っている場合は特に、満足100%ではないthatsの。

+0

私はあなたが達成しようとしていることを説明する必要があると思います –

+1

しかし、何が問題なのですか? –

+0

が完了しました。 "10つ以上行く..." –

答えて

1

工場が異なるクラスのインスタンスを返すことができる場合、これらのクラスはすべて共通のインタフェースを実装する必要があります。この場合、実際のクラスを気にする必要はありませんが、このインターフェイスで作業してください。

作成されたオブジェクトには異なるメソッド(汎用インターフェイスでは扱えません)が必要な場合は、明らかに、ファクトリにはすべてのオブジェクトタイプ(または別のファクトリ)に対して個別のメソッドが必要です。

あなたは本当に型の安全性は無関係であり、あなたが唯一の自動補完をIDEにしたい場合は、単に次のようにdoc-comment with multiple typesを追加し、戻り値の異なる種類の方法のために必要がある場合(PHPStormとNetBeansはこの表記をサポート):

/** 
* … 
* 
* @return A|B|C 
*/ 
関連する問題