2017-04-10 22 views
0

私は数回以下とreasonsingが何であるかを考えることができないようなコードを見てきましたちょうどコンストラクタを使用するのではなく、このような静的関数?PHPとし、クローンの代わりに、コンストラクタ

+1

これは、どのように使用されているかを見るために、より多くのコンテキストを 'withParameter()'で見るのに役立ちます。静的関数に関しては、クラスからのより多くのコンテキストが必要ですが、時には実際のコンストラクタがプライベートになることもあります。その代わり、静的な作成メソッドとして実装されたさまざまなタイプの入力パラメータをインスタンス化するいくつかの異なるメソッドを提供します。 –

+1

最初のケースは、クラスを自由に関数を呼び出してクラスの新しいインスタンスを取得できますが、必要に応じて元のインスタンスを維持できるという意味で、クラスが値型のように動作するように見えます。 2つ目はコンテキストに依存しますが、オブジェクトインスタンスを作成するためのより表現力豊かな方法を提供するように見えます。 – apokryfos

答えて

2

機能1:この機能は、パラメータ$clone->parameterが設定された現在のクラスオブジェクト$thisのクローンを返す

public function withParameter($parameter) 
{ 
    $clone = clone $this; 
    $clone->parameter = $parameter; 
    return $clone; 
} 

。ここでは、見返りに$this

機能あなたの現在のクラスオブジェクト2に影響を与えないオブジェクト$clone上の操作を実行できます。ここ

public static function fromString(string $parameter) 
{ 
    return new StringValueClass($parameter); 
} 

我々はあなたが返すことができ、この静的関数を使用して他のクラスのオブジェクトを返していますオブジェクトではなく、__constructを経由することはできません。return何か

関連する問題