加入收藏 | 设为首页 | 会员中心 | 我要投稿 草根网_ASP源码网 (https://www.1asp.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

PHP学习_PHP的变量赋值你真的懂了?

发布时间:2022-10-19 12:54:08 所属栏目:教程 来源:
导读:  PHP的变量赋值

  这个题目估量良多人会嗤之以鼻,变量赋值?excuse me?咱们学开辟的第一课就会了好欠好。可是,便是如许根底的工具,反而会让良多人蒙圈,比方,值以及援用的干系。明天,咱们就来详细讲讲
  PHP的变量赋值
 
  这个题目估量良多人会嗤之以鼻,变量赋值?excuse me?咱们学开辟的第一课就会了好欠好。可是,便是如许根底的工具,反而会让良多人蒙圈,比方,值以及援用的干系。明天,咱们就来详细讲讲。
 
  起首,界说变量以及赋值这个不必多说了吧
 
  $a = 1;
  $b = '2';
  $c = [4, 5, 6];
  $d = new stdClass();
  四个变量,辨别界说了整型、字符串、数组的工具。这也是咱们每天要打交道的四品种型。
 
  而后,变量给变量赋值。
 
  $a1 = $a;
  $b1 = $b;
  $c1 = $c;
  $d1 = $d;
  请留意,前三个的赋值都是一般的赋值PHP变量,也便是对于详细内容的拷贝。当咱们修正$a1的时分$a没有会有变革。$a1是新开的内存空间保管了咱们的值。也便是说,他们的值是同样的,但内存地点纷歧样。是两个没啥干系的长患上很像的人罢了。
 
  可是$d1以及$d就没有是了,这两货不只值是同样的,内存地点也是同样的。这类状况便是咱们所说的援用赋值。当$d1发作变革时,$d2也会发生变革。
 
  能够这么说:援用赋值便是为原变量树立了一个Windows下的快速体式格局或许Linux中的软链接。
 
  器具体的例子来讲明,起首是平凡值的赋值:
 
  // 平凡赋值
  $v = '1';
  $c = $v;
  $c = '2';
  echo $v, PHP_EOL; // '1'
  // 数组也是平凡赋值
  $arr1 = [1,2,3];
  $arr2 = $arr1;
  $arr2[1] = 5;
  print_r($arr1); // [1, 2, 3]
  $c没有会对于$v的值发生影响。$arr2修正了下标1,也便是第二个数字为5,固然也没有会对于$arr1发生影响。
 
  那末工具方式的援用赋值呢?
 
  // 工具都是援用赋值
  class A {
      public $name = '我是A';
  }
  $a = new A();
  $b = $a;
  echo $a->name, PHP_EOL; // '我是A'
  echo $b->name, PHP_EOL; // '我是A'
  $b->name = '我是B';
  echo $a->name, PHP_EOL; // '我是B'
  果真没有出所料,$b修正了name属性的内容后,$a外面的name也酿成了$b所修正的内容。
 
  正在这类状况下,假如工具想要没有是援用传送的,一是运用__clone(),也便是原型形式来停止本人的拷贝。二是从里面从头new一个呗。
 
  // 运用克隆处理援用传送成绩
  class Child{
      public $name = '我是A1的上级';
  }
  class A1 {
      public $name = '我是A';
      public $child;
      function __construct(){
          $this->child = new Child();
      }
      function __clone(){
          $this->name = $this->name;
          // new 或许用Child的克隆均可以
          // $this->child = new Child();
          $this->child = clone $this->child;
      }
  }
  $a1 = new A1();
  echo $a1->name, PHP_EOL; // 输入a1原始的内容
  echo $a1->child->name, PHP_EOL;
  $b1 = $a1;
  echo $b1->name, PHP_EOL; // b1如今也是a1的内容
  echo $b1->child->name, PHP_EOL;
  $b1->name = '我是B1'; // b1修正内容
  $b1->child->name = '我是B1的上级';
  echo $a1->name, PHP_EOL; // a1酿成b1的内容了
  echo $a1->child->name, PHP_EOL;
  // 运用__clone
  $b2 = clone $b1; // b2克隆b1
  $b2->name = '我是B2'; // b2修正内容
  $b2->child->name = '我是B2的上级';
  echo $b1->name, PHP_EOL; // b1没有会酿成b2修正的内容
  echo $b1->child->name, PHP_EOL;
  echo $b2->name, PHP_EOL; // b2修正的内容没成绩,b一、b2没有是一个货了
  echo $b2->child->name, PHP_EOL;
  工具的援用这一块的确会简单让人蒙圈。出格是愈加庞大的工具,外部的属性另有各类援用其余工具的时分。这类状况下必定要细心确认援用赋值会没有会带来成绩,假如有成绩,就运用新工具或许克隆技能停止援用成绩的处置。
 
  最初,放松一下,援用变量的赋值就以及咱们给办法传援用参数同样的,运用一个&标记就能够啦!
 
  // 援用赋值
  $b = &$v;
  $b = '3';
  echo $v, PHP_EOL;
  明天咱们更深化的进修以及理解了一下PHP中的赋值成绩,出格是平凡赋值以及援用赋值的成绩。下回看代码以及框架的时分能够留意留意他人是怎样灵敏运用这两种赋值的哈,本人也能尝尝能不克不及使用这两种体式格局改革下本人已经写过的BUG哦!
 
  测试代码:
  https://github.com/zhangyue0503/dev-blog/blob/master/php/201910/source/PHP%E7%9A%84%E5%8F%98%E9%87%8F%E8%B5%8B%E5%80%BC.php
  参考文档:
  https://www.php.net/manual/zh/language.variables.basics.php
 

(编辑:草根网_ASP源码网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章