Я думал, что PHP =
было простым присвоением значений. Например:Почему поведение 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 переменных и манипулировать ими, не имея их в этом состоянии «квантовая запутанность» и без копирования?
см. Также: http://docs.php.net/manual/en/language.oop5.references.php – VolkerK