2016-05-23 4 views
0

戻りオブジェクトインスタンス

$this->state = $state; 
return $this; 

$instance = clone $this; 
$instance->state = $state; 
return $instance; 

コンテキスト間のいずれかの違いがあります0私が間違っていない場合は、2つの異なるオブジェクトがクローン作成時に生成されます。例えば、AS

+0

違いは何ですか、これは$ thisです。これは$ thisのクローンです。クローンはコピーのようなもので、複製です。あなたが同じ値であることを意味するならば、それはまさにコピーが複製であることです。ファイルをコピーして名前を変更すると、コンテンツは同じです...はい、それらが分岐するまでです。これで 'spl_object_hash'をチェックすると、それらは同じではありません。 – ArtisticPhoenix

+0

あなたの例の唯一の違いは、元の状態を決してクローンに適用しないと、2番目の状態になります。それは、ファイルをコピーして、元のファイルを変更せずにコピーしたファイルを編集するようなものです。それらは、クローニングされたときに2つの異なる別個のエンティティになる。 – ArtisticPhoenix

+0

@ArtisiticPhoenix私はちょうど私が入っている文脈を追加しました。あなたの素早い返答をありがとう。 – MinhTri

答えて

0

あなたは、あなたが何のクローンを使用しているこの

$test = new TestCase; 
$test->setState(1)->setState(2); 

$test->getState(); 

をすれば$testが実際にそれの状態セットがありませんでした本来の目的であるので、答えは、noneです。他の2つのクローンは、メソッドチェーンの終わりに破棄されます。

メソッドチェーンが正しい値を返すことがありますが、あなたは、このような

function a(){ 
     $this->test = new TestCase; 
     $this->test->setState(1)->setState(2); 
} 

function b(){ 
    echo $this->test->setState(3); 
} 

として、異なるスコープにobect $testを取る場合、私はそれはいくつかあります言ったようにその後の試験は、他の2州については知りませんでした何が無意味です。

通常、ある初期値を設定した後にオブジェクトをフォークした場合、そのオブジェクトをクローンしたいと思うでしょう。例は

$Qb = new QueryBuilder(); 
$Qb->select('*')->table('posts')->where('published', '<', '2014-02-20'); 

    //copy and diverge to count results, 
$tQb = clone $Qb; 
$tQb->select('COUNT(id) AS total'); 
$total = $tQb->getResult(); 

    // add limits to original instance. 
$Qb->limit('20'); 
$rows = $Qb->getResult(); 

クローニングを保存するために使用される参照クエリを構築し、その結果(マイナス例えば制限や注文)をカウントするために別のクエリを行うには、それを複製し、クエリビルダ、のようになりますクエリの最初の部分を設定し、個々のニーズに合わせてコピーして分岐させます。 1つは合計結果1を数え、限られた数の結果しか得られません。これはwhere句に複数の結合と複数の部分がある場合に便利です。

0
:現在の状態と
+0

クローンはコピーであるので、私は違うとは言わないでしょう。元と同じ状態の同じオブジェクトですが、その時点からの別のインスタンスです。 – ArtisticPhoenix

+0

ありがとうございます!いいえ、現在の状態のオブジェクトインスタンスを1つだけ戻したいだけです。 – MinhTri

関連する問題