2016-10-09 4 views
1

__construct()メソッドを使用して静的メソッドを使用してClientオブジェクトをインスタンス化する必要がありますが、静的メソッドの使用時にオブジェクトがインスタンス化されないため、__construct()を使用する方法はありません。__constructを使用した静的メソッド

私はinitメソッドを使うことができると考えました。

次に、上記のクラスを他の場所にロードして、以下の操作を行うことができます。

API::foo(); 

私の質問:

  1. 私はクラスを書いたやり方に何か問題はありますか?
  2. 上記のコードがパフォーマンスに問題を引き起こしますか?
  3. もっと良い方法がありますか?

何か助けていただければ幸いです。

答えて

2

アプローチとして、この方法は結構ですが、ここで私はinit(Client $client)のような、むしろ右のクラスでそれをインスタンス化するよりも、Clientinit()で関数を渡すSOLID以上であることを。そうで$settings、より良い引数として渡すか、またはいくつかのprivate変数で保存して、初期化子でハードコーディングするよりもむしろ。

それは、DL手紙、Dependency Inversion PrincipleLiskov Substitution Principle

ないパフォーマンスの問題が、唯一の建築アプローチを指します。しかし、私にとっては、コンストラクタを避け、静的な呼び出しではなく$api = new API($client, $settings);を使用するための前提条件はありません。

そしてコンストラクタ(または初期化子)署名が

public function __construct(Client $client, array $settings); 
ようになります。
関連する問題