博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP浅拷贝、深拷贝简析
阅读量:7083 次
发布时间:2019-06-28

本文共 1634 字,大约阅读时间需要 5 分钟。

前言:

        在PHP中, “=” 作为赋值符号,对于普通变量是深拷贝,对于对象来说是浅拷贝(对象的赋值是引用赋值)。

        注意:对象作为参数传递时,也是引用传递,无论函数定义时参数前面是否有&符号。

简述:       

    *深拷贝:赋值时值完全复制,完全的copy,对其中一个作出改变,不会影响另一个.(一直在模仿,也可以超越。)        *浅拷贝:赋值时,引用赋值,相当于取了一个别名。对其中一个修改,会影响另一个.(命运共同体,一荣俱荣,一损俱损)

实践:

1.普通变量的深拷贝的实现   

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//普通变量的深拷贝的实现
$a
=
'zhangsan'
;
$b
=
$a
;
echo 
$a
.
"\r\n"
;
echo 
$b
.
"\r\n"
;
 
 
$b
=
"lisi"
;
echo 
$a
.
"\r\n"
;
echo 
$b
.
"\r\n"
;
 
/**
 
*输出结果
 
*zhangsan
 
*zhangsan
 
*
 
*zhangsan
 
*lisi
 
**/

 结论:普通变量的赋值就是深拷贝

2.普通变量的浅拷贝的实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//普通变量的浅拷贝的实现
$c
=
"wangwu"
;
$d
=&
$c
;
echo 
$c
.
"\r\n"
;
echo 
$d
.
"\r\n"
;
 
echo 
"\r\n"
;
 
$d
=
"xiaoer"
;
echo 
$c
.
"\r\n"
;
echo 
$d
.
"\r\n"
;
 
/**输出结果
 
*wangwu
 
*wangwu
 
*   
 
*xiaoer
 
*xiaoer
 
**/

结论:普通变量的引用赋值是深拷贝

3.对象深拷贝的实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//对象深拷贝的实现
class 
Person{
    
public 
$name
;
}
 
$zhangsan
=
new 
Person();
$zhangsan
->name=
'zhangsan'
;
 
$lisi
=
$zhangsan
;
 
echo 
$zhangsan
->name.
"\r\n"
;
echo 
$lisi
->name.
"\r\n"
;
 
echo 
"\r\n"
;
 
$lisi
->name=
'lisi'
;
echo 
$zhangsan
->name.
"\r\n"
;
echo 
$lisi
->name.
"\r\n"
;
 
/**输出结果
 
*zhangsan
 
*zhangsan
 
*
 
*lisi
 
*lisi
 
*/

结论:对象的赋值是深拷贝

4.对象浅拷贝的实现  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//对象浅拷贝的实现
$JackMa
=
new 
Person();
$JackMa
->name=
'Ma Yun'
;
 
$PoneyMa
=
clone 
$JackMa
;
echo 
$JackMa
->name.
"\r\n"
;
echo 
$PoneyMa
->name.
"\r\n"
;
 
echo 
"\r\n"
;
 
$PoneyMa
->name=
'Ma Huateng'
;
echo 
$JackMa
->name.
"\r\n"
;
echo 
$PoneyMa
->name.
"\r\n"
;
 
/**输出结果
 
*Ma Yun
 
*Ma Yun
 
*
 
*Ma Yun
 
*Ma Huateng
 
*/

结论:对象的克隆是浅拷贝

本文转自 hgditren 51CTO博客,原文链接:http://blog.51cto.com/phpme/2048235,如需转载请自行联系原作者
你可能感兴趣的文章
输入框禁止表情
查看>>
最大乘积(大佬的代码)
查看>>
dagger android 学习(四):基于dagger2的mvp架构
查看>>
CentOs7 使用iptables防火墙开启关闭端口
查看>>
swift - 自定义tabbar按钮的操作
查看>>
VS2008中如何加入flash
查看>>
iOS JPG图片文件压缩中的坑
查看>>
swift的可选项--optional/?
查看>>
一行代码解决UITableView键盘收起
查看>>
java 企业 网站源码 模版 屏幕自适应 有前后台 springmvc SSM 生成静态化
查看>>
sqlite3 新建数据库的过程
查看>>
运算符
查看>>
electron-vue 实践 1 —— 安装和创建工程
查看>>
RGBa颜色 css3的Alpha通道支持
查看>>
相同类名,单个执行
查看>>
657 机器人能否返回原点
查看>>
初识phoneGap + dreamweaver5.5 + jQuery Mobile UI
查看>>
SQL SERVER全面优化-------写出好语句是习惯
查看>>
深入理解Spring MVC 思想
查看>>
java语言体系的技术简介之JSP、Servlet、JDBC、JavaBean(Application)
查看>>