2017-11-06 8 views
0

私は、これは私の部分のロジックの問題や知識だけの欠如であるかどうかを把握しようとしています。クラスを作成してメソッドを呼び出すためにクラス名を取得することはできますか?

私は静的メソッドConnectionFactory::getConnectionInterface($config['type'])を持っています。これは文字列のクラス名を返します。そのクラスにはメソッドがあります。createConnection私はすべてを1行で行うことができるかどうかを判断しようとしています。私は、さらに他の人に、私はいくつかの部分で近づくように私は感じるなど、全く新しいの周りにそれらを追加し、()ため{}を切り替え

new {ConnectionFactory::getConnectionInterface($config['type'])}()->createConnection(); 

のようにいろいろなことを試してみました。

私は、工場にオブジェクトの新しいインスタンスを返すことができます(そして、私の理解から、それは正しい方法かもしれません)。しかし、私はこれをどのように書くことができるかを理解したいと思っていますコード、または私ができない場合。

答えて

1

あなたはまた、あなたがクラスのインスタンスの代わりに、クラス名を返すことができ()

(new ConnectionFactory::getConnectionInterface($config['type'])())->createConnection(); 

に新しいオブジェクトをラップする必要があります。

public static function getConnectionInterface($type) { 
    // generate class name $class 

    return new $class() 
} 

次に、呼び出すときに新しいインスタンスを作成するのではなく、そのオブジェクトを使用してください。

$connection = ConnectionFactory::getConnectionInterface($config['type'])->createConnection() 
+0

クイックフィードバックに感謝します。私はこれを試しました(上記のものをコピーしました)。しかし、文法エラー、予期しないgetConnectionInterface(T_STRING)、変数(T_VARIABLE)または '$'を予想しています。私は自分の工場でそれを生成しなければならないと思っています(私はこれがファクトリパターンを正しく使用していると思います)、それを行う方法が分かっていると思っていました。 – RhoVisions

関連する問題