您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页PHP数组变量之写时复制的要点只有数组才有的概念。

PHP数组变量之写时复制的要点只有数组才有的概念。

来源:意榕旅游网
PHP数组变量之写时复制的要点只有数组才有的概念。

1.如果数组指针位置⾮法,复制时,会将新数组指针初始化!

2.值传递时,PHP采⽤了⼀个COW(写时复制,copy on write)的优化措施!写时复制的两个要点: (实际开发可以使⽤reset unset 解决这类问题)$arr1 = array('吕布','赵云','典韦');end($arr1);

next($arr1); //⾮法了

$arr2 = $arr1; //复制数组////var_dump($arr2);echo '
';

var_dump(current($arr2));//初始化$arr2 // PHP要点:echo '
';

var_dump(current($arr1));//⾮法false // 1.值传递时,并没有马上为新变量$arr2开辟值空间,⽽在两个变量都未发⽣改变之前,还是使⽤的同⼀个值空间,

//echo '
';                // 注意:current也会发⽣写操作,导致空间被复制!先current谁,谁是那个新的,数组指针随之初始化

//如果上⾯两个输出顺序换⼀下:

//var_dump(current($arr1));//初始化$arr1 // 2.⼀旦某个变量发⽣改变,此时会复制值空间,让发⽣改变的变量去引⽤新的空间!//echo '
';

//var_dump(current($arr2));//⾮法false // 第⼀句输出决定谁发⽣改变,所以草绿⾊代码段输出的是$arr2,此时引⽤新空间的就是$arr2。否则就是$arr1。 echo '
';

var_dump(current($arr1));        // 例如:$arr2[]='关⽻';输出前决定了$arr2发⽣改变。所以$arr2引⽤新空间,复制时,会将新数组指针初始化。

echo '
';                // 那么此时⾮法的就是$arr1。如果$arr1[]='关⽻',输出$arr1就是数组初始化的值:第⼀个元素'吕布'。$arr2⾮法false

var_dump(current($arr2));         // 简单地说,谁先变,谁就引⽤新的值空间。 可控的!

foreach 于指针的问题 (不可控的)1.遍历的是拷贝⽽不是原数组!

2.只有在原数组发⽣写操作时,才会真正的拷贝。此时原数组指针停留在当前位置,如果已经⾮法,则会初始化!$arr1 = array('⼀','⼆','三');foreach($arr1 as $key =>$value){  var_dump($key,$value);   if($key == 0){    $arr1[] = 'hero';}

  echo '
';}

var_dump(crrent($arr1));

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务