我认为PHP =
是一个简单的值赋值.例如:
$x = 1; $a = $x; $b = $x; $a++; echo $a; echo $b;
21
按预期生产.但是,以下代码的行为与我的预期不同.我基本上试图将"相同"值分配给许多变量:
class X { public $val = 0; public function doSomething() { $this->val = "hi"; } } function someFunction() { $template = array('non_object' => 0, 'object' => new X()); $a = $template; $b = $template; //Do something $a['object']->doSomething(); var_dump($a); var_dump($b); }
生产:
array(2) { ["non_object"]=> int(0) ["object"]=> object(X)#1 (1) { ["val"]=> string(2) "hi" } } array(2) { ["non_object"]=> int(0) ["object"]=> object(X)#1 (1) { ["val"]=> string(2) "hi" } }
正如您所看到的,该object
属性已array A
按预期更改,但也已更改array B
.
您可以在此处查看代码:http://sandbox.onlinephpfunctions.com/code/bff611fc9854b777114d38a3b4c60d524fdf2e19
如何为许多PHP变量分配相同的值并操纵它们而不使它们处于这种"量子纠缠"状态而不复制?
您已为同一对象分配变量$ a和$ b.所以,如果你打电话$a["object"]->doSomething()
或者$b["object"]->doSomething()
会给同样的结果,因为$a["object"]
和$b["object"]
是一样的.
如果您需要输出不同,请尝试以下代码:
class X { public $val = 0; public function doSomething() { $this->val = "hi"; } } function someFunction() { $a = array('non_object' => 0, 'object' => new X()); $b = array('non_object' => 0, 'object' => new X()); //Do something $a['object']->doSomething(); var_dump($a); var_dump($b); }
输出如下:
array(2) { ["non_object"]=> int(0) ["object"]=> object(X)#1 (1) { ["val"]=> string(2) "hi" } } array(2) { ["non_object"]=> int(0) ["object"]=> object(X)#2 (1) { ["val"]=> int(0) } }
在这里,您将不同的对象分配给$ a和$ b.
请检查一下