Macht es einen Unterschied, ob ich ein Objekt kopiere, indem ich es einfach einem anderen Objekt zuweise, anstatt es zu klonen?Was ist der Unterschied zwischen CLONE und dem Kopieren des Objekts?
1
A
Antwort
3
Wenn Sie es einfach zuweisen, wie:
$obj2 = $obj;
dann kopieren Sie nicht das Objekt. Sie kopieren die Referenz auf das Objekt. Somit zeigen $obj2
und $obj
auf dasselbe Objekt.
Beispiel Siehe:
class A {
public $foo = 'bar';
}
$obj = new A();
$obj2 = $obj;
$obj2->foo = 'foo too';
echo $obj->foo . PHP_EOL;
$obj = new A();
$obj2 = clone($obj);
$obj2->foo = 'foo too';
echo $obj->foo . PHP_EOL;
druckt
foo too
bar
0
Neben Felix Kling Antwort, Klon mit ermöglicht die Verwendung von __cl eine() magische Methode.
class Obj{
public $cloned = 0;
public function __clone(){
$this->cloned++;
}
}
$obj1 = new Obj();
$obj2 = $obj1;
echo 'Times cloned: ' . $obj2->cloned; // returns 'Times cloned: 0'
var_dump($obj2 === $obj1); // true
$obj3 = clone $obj1;
echo 'Times cloned: ' . $obj3->cloned; // returns 'Times cloned: 1'
var_dump($obj3 === $obj1); // false
Verwandte Themen
- 1. Was ist der Unterschied zwischen Unterstrich clone() und einfach '='?
- 2. Was ist der Unterschied zwischen der Installation eines Perl-Moduls und dem Kopieren des gesamten Ordners?
- 3. Was ist der Unterschied zwischen Kopieren und Klonen?
- 4. Was ist der Unterschied zwischen "kopieren" und "behalten"?
- 5. Was ist der Unterschied zwischen dem WebConfigurationManager und dem ConfigurationManager?
- 6. Was ist der Unterschied zwischen dem Standard- und dem Standardkonstruktor?
- 7. Was ist der Unterschied zwischen dem Betriebssystem und dem Kernel?
- 8. Was ist der Unterschied zwischen `==` und `ist`?
- 9. Unterschied zwischen dem Erstellen eines neuen Objekts und der Abhängigkeitsinjektion
- 10. Was ist der Unterschied zwischen dem Erstellen eines Objekts mit Object.create() und Object.assign()?
- 11. Was ist der Unterschied zwischen dem Umfang eines Objekts und seinem Kontext in JavaScript?
- 12. Was ist der Unterschied zwischen einem Mixin und dem Dekorationsmuster?
- 13. Was ist der Unterschied zwischen OnStart und dem App Constructor
- 14. Was ist der Unterschied zwischen dem [OptionalField] und [NonSerialized]
- 15. Was ist der Unterschied zwischen dem neuen Operator und Class.newInstance()?
- 16. Was ist der Unterschied zwischen `&` und `ref`?
- 17. Was ist der Unterschied zwischen Verilog! und ~?
- 18. Was ist der Unterschied zwischen dem Submit-Mechanismus des Client-Browsers und dem ASP.NET-Postback-Mechanismus?
- 19. Was ist der Unterschied zwischen:.! und: r !?
- 20. Was ist der Unterschied zwischen Difftime und '-'?
- 21. Was ist der Unterschied zwischen $ und $$?
- 22. was ist der Unterschied zwischen [[], []] und [[]] * 2
- 23. Was ist der Unterschied zwischen/* ... */und/** ... */
- 24. Was ist der Unterschied zwischen $ (...) und `...`
- 25. Was ist der Unterschied zwischen .Equals und ==
- 26. Was ist der Unterschied zwischen "$^N" und "$ +"?
- 27. Was ist der Unterschied zwischen + = und = +?
- 28. Was ist der Unterschied zwischen? und ? = Nil
- 29. Was ist der Unterschied zwischen $ (()) und Ausdruck?
- 30. Was ist der Unterschied zwischen Thread.Sleep (Timeout) und ManualResetEvent.Wait (Timeout)?
Gr8 Antwort ...... danke –
zu viele Tastenanschläge, um 'groß' in voller Größe einzugeben? Ich hoffe du nennst deine Variablen nicht so ... – Robert