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

2.值传递时,PHP采用了一个COW(写时复制,copy on write)的优化措施!

写时复制的两个要点:  (实际开发可以使用reset unset 解决这类问题)

<?php

$arr1 = array('吕布','赵云','典韦');

end($arr1);
next($arr1); //非法了

$arr2 = $arr1; //复制数组
var_dump($arr2);
echo '<br>';
var_dump(current($arr2));//初始化$arr2       // PHP要点:
echo '<br>';
var_dump(current($arr1));//非法false           // 1.值传递时,并没有马上为新变量$arr2开辟值空间,而在两个变量都未发生改变之前,还是使用的同一个值空间,
//echo '<br>';                // 注意:current也会发生写操作,导致空间被复制!先current谁,谁是那个新的,数组指针随之初始化
//如果上面两个输出顺序换一下:
//var_dump(current($arr1));//初始化$arr1     // 2.一旦某个变量发生改变,此时会复制值空间,让发生改变的变量去引用新的空间!
//echo '<br>';
//var_dump(current($arr2));//非法false         // 第一句输出决定谁发生改变,所以草绿色代码段输出的是$arr2,此时引用新空间的就是$arr2。否则就是$arr1。    
echo '<br>';
var_dump(current($arr1));            // 例如:$arr2[]='关羽';输出前决定了$arr2发生改变。所以$arr2引用新空间,复制时,会将新数组指针初始化。
echo '<br>';                // 那么此时非法的就是$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 '<br>';

}

var_dump(crrent($arr1));

转载于:https://www.cnblogs.com/echo0821/p/5263774.html

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

  1. PHP写时复制, 变量复制和对象复制不同!!!

    2016年3月18日 15:09:28 星期五 一直以为PHP对象也是写时复制....... 其实: PHP的变量是写时复制, 对象是引用的 写时复制: $a = $b; 如果$b的内容不改变, $a ...

  2. siwft 写时复制 Copy-On-Write

    写时复制 Copy-On-Write 1 定义 在siwft 标准库中,Array,Dictionary,Set这样的集合类型是通过写时复制来实现的. import Foundationvar a1 ...

  3. 写时复制(Copy-On-Write)思想在Java中的应用

    以下文章来源方志朋的博客,回复"666"获面试宝典 来源:https://blog.csdn.net/fuzhongmin05/article/details/117076906 ...

  4. Linux fork()函数底层CopyOnWrite写时复制实现原理剖析

    创建子进程的速度应该是怎么样的? 如果父进程是redis,内存数据比如说有10G,需要考虑的有两个点: ①速度如何 ②内存空间够不够 在Linux中有个系统调用--fork(): ①速度:快 ②空间: ...

  5. php 垃圾回收机制----写时复制和引用计数

    PHP使用引用计数和写时复制来管理内存.写时复制保证了变量间复制值不浪费内存,引用计数保证了当变量不再需要时,将内存释放给操作系统. 要理解PHP内存管理,首先要理解一个概念----符号表. 符号表的 ...

  6. 写时复制,写时拷贝,写时分裂,Copy on write

    2019独角兽企业重金招聘Python工程师标准>>> 写时复制,写时拷贝,写时分裂 (Copy-on-write,简称COW)是计算机资源管理方面的一种优化技术,有着广泛的应用,比 ...

  7. 实战并发编程 - 05等效不可变对象CopyOnWriteArrayList适用场景剖析_写时复制COW

    文章目录 Pre 等效不可变对象 实例变量array就是一个等效不可变对象? 写时复制机制 写时复制的目的 优点 缺点 CopyOnWriteArrayList的使用场景 小结 Pre 本篇文章我们分 ...

  8. Linux-Copy On Write写时复制机制初探

    文章目录 生猛干货 COW概述 *Unix fork 函数族exec( ) 为什么有了COW? COW 原理 COW的优缺点 小结 搞定Linux核心技术 生猛干货 从系统安装到程序员必备的Linux ...

  9. Java源码解读--CopyOnWriteList写时复制集合容器

    加元素时复制,适用于写少读多的场景. 读的时候不加锁,写的时候加锁.Vector的实现是不论读写都加锁. 写的时候复制出一个新的数组,将新添加的元素添加进新的数组,然后将引用指向新的数组地址,因此写的 ...

最新文章

  1. Java之——利用Comparator接口对多个排序条件进行处理
  2. 基于可靠消息方案的分布式事务(四):接入Lottor服务
  3. hadoop 2.7.3 java_java - Hadoop 2.7.3 Java运行时错误 - 找不到core-site.xml - 堆栈内存溢出...
  4. split函数python 未定义_Python之Split函数
  5. Android ViewFlipper实现多个布局手势切换的效果
  6. Promolike Qualtrics Dashboard
  7. SecureCRT 配置文件中 找密码
  8. [C++11]通过using定义基础类型和函数指针别名
  9. 【数据结构基础笔记】【栈】
  10. 鼓励参与计算机考试宣传标语,诚信考试的宣传标语(精选60条)
  11. java将图片(jpg/bmp/png)转16位bmp(RBG565)
  12. android快速点击分析
  13. ae中心点重置工具_如何使用AE制作文字破碎动画?制作ae破碎文字特效教程分享...
  14. [ POI 2005 ] Bank Notes
  15. 家庭洗车APP --- Androidclient开展 之 网络框架包介绍(一)
  16. java毕业设计新能源汽车故障分析2021Mybatis+系统+数据库+调试部署
  17. vue项目目录详细解读
  18. 22:紧急措施http://noi.openjudge.cn/ch0107/22/
  19. pandas学习-变形-task15
  20. 时光穿梭机(删除文件)

热门文章

  1. Apache配置--用户认证(针对目录访问)-update2015-05-02
  2. 小蠢笔记:从继承特性来看构造函数
  3. [专题总结]AC自动机
  4. P2774 方格取数问题 网络最大流 割
  5. grunt合并压缩js、css文件
  6. LaunchScreen.xib 设置启动图
  7. JSON 基础解释.
  8. 8583报文解析实例介绍
  9. android 学习笔记之图形算法
  10. Android Studio 在Ubuntu 下快捷键失效