als Beispiel, wenn Sie dies tun
$test = new TestCase;
$test->setState(1)->setState(2);
$test->getState();
was dann Klon werden Sie keine verwenden, ist die Antwort, weil $test
ist das ursprüngliche Objekt, das hatte eigentlich nie hat es Zustand gesetzt. Die anderen 2 Klone werden am Ende der Methodenkette verworfen.
Die Kette Verfahren kann den richtigen Wert zurück, aber wenn Sie die Obect $test
in einen anderen Bereich übernehmen, wie
function a(){
$this->test = new TestCase;
$this->test->setState(1)->setState(2);
}
function b(){
echo $this->test->setState(3);
}
Dann hat Test nie über die anderen zwei Staaten bekannt ist, wie ich einige ist es, sagte was sinnlos.
Normalerweise möchten Sie ein Objekt klonen, wenn Sie es nach dem Setzen eines Anfangswerts forkieren. Ein Beispiel wäre wie eine Query Builder sein, in dem Sie die Abfrage erstellen und es dann klonen eine separate Abfrage zu tun, um die Ergebnisse (minus eine Grenze oder um zum Beispiel) zählen
$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();
Siehe Klonen verwendet werden würde, zu retten Einrichten des ersten Teils der Abfrage, dann kopieren und divergieren Sie sie für die individuellen Bedürfnisse. Eins um die Gesamtergebnisse zu zählen, um eine begrenzte Anzahl von Ergebnissen zu ziehen. Das ist nützlich, wenn Sie mehrere Joins und mehrere Teile für die Where-Klausel etc. hatten.
was meinst du Unterschied, man ist $ das der andere ist ein Klon von $ this. Klon ist wie eine Kopie, es ist ein Duplikat. Wenn du meinst, der Wert ist der gleiche, naja das ist was eine Kopie ist ein Duplikat, wenn du eine Datei kopierst und sie umbenennst ist der Inhalt gleich ... Ja, bis sie divergieren. Wenn Sie dieses 'spl_object_hash' überprüfen, sind sie nicht dasselbe. – ArtisticPhoenix
Der einzige Unterschied in Ihrem Beispiel wäre in der zweiten, wenn Sie niemals den Status auf das Original und nur auf den Klon anwenden, dann sind sie offensichtlich auseinander gegangen. Es ist, als würde man die Datei bearbeiten und dann die kopierte Datei bearbeiten, ohne das Original zu ändern. Sie werden zu zwei separaten verschiedenen Entitäten, wenn sie geklont werden. – ArtisticPhoenix
@ArtisiticPhoenix Ich habe gerade den Kontext hinzugefügt, in dem ich bin. Danke für Ihre schnellen Antworten. – MinhTri