当前位置:  开发笔记 > 编程语言 > 正文

为什么PHP赋值行为如此?

如何解决《为什么PHP赋值行为如此?》经验,为你挑选了1个好方法。

我认为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变量分配相同的值并操纵它们而不使它们处于这种"量子纠缠"状态而不复制?



1> Ijas Ahamed ..:

您已为同一对象分配变量$ 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.

请检查一下

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有