PHP中=赋值操作符对不同数据类型的不同行为


Posted in PHP onJanuary 02, 2011

首先解释赋值操作符=的行为,看下面的例子:

$i = 0; 
$j = $i; 
$j = 0; 
echo $j; // 打印输出0 $arr = array(0); 
$arr2 = $arr; 
$arr2[0] = 1; 
echo $arr[0]; //打印输出0 
class B 
{ 
public $i = 0; 
} 
$b = new B(); 
$c = $b; 
$c->i = 1; 
echo($b->i); // 打印输出1

从这个例子可以看出,如果=操作符右边的变量为基本数据类型或者数组,那么=操作符把右边变量的一份拷贝赋值给左边变量;如果右边变量不是基本数据类型或者数组,如class,那么=会把一个指向右边变量的引用赋值给左边变量。注意:是指向右边变量的引用,而不是指向右边变量所指的内容区域的引用;具体看下边的例子
$a = new A(); 
$b_a = $a; 
$b_r = &$a; $b_a = null; 
var_dump($a); //打印 object(A)[2],$a所指向的内容还在 
$b_r = null; 
var_dump($a); // 打印 null,$a所指向的内容被清除了

上面的例子也说明了,如果用 $var = &$a 的方式赋值的话,用$var=null来销毁变量$var的话事实上是把$var所指内容被设置null了,其实这句话也暗示了任何一个指向该内容区域的引用变量均可用来销毁该内容区域的内容。所以,要销毁变量$var的话用 unset($var) 。PS:事实上一这种方式赋值$var只是个引用,占用不了多少内存,要不要销毁没所谓,这里这是说下必须用unset的方式销毁。

下面则是《用户手册》中的“引用的解释”的例子:

$a =& $b;
下边有这么一句解释:
这意味着 $a 和 $b 指向了同一个变量。
注: $a 和 $b 在这里是完全相同的,这并不是 $a 指向了 $b 或者相反,而是 $a 和 $b 指向了同一个地方。
引用是什么?

在 PHP 中引用意味着用不同的名字访问同一个变量内容。这并不像 C 的指针,替代的是,引用是符号表别名。注意在 PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字。最接近的比喻是 Unix 的文件名和文件本身??变量名是目录条目,而变量内容则是文件本身。引用可以被看作是 Unix 文件系统中的紧密连接。

关于“引用是什么”的一点解释:

int i = 0;
int j = 0;
int *p = &i;
p = &j;
上面的代码中,p是一个指向i的内存地址的指针,而*p才是其中的内容;p=&j指向改变了p指针的指向,用*p=111的表达式才会改变i的内容。而PHP中则不是,下面的例子

$i = 0;
$p = &$i;
$p = 111则马上会改变$i的值。

PHP 相关文章推荐
粗略计算在线时间,bug:ip相同
Dec 09 PHP
Zend 输出产生XML解析错误
Mar 03 PHP
php的urlencode()URL编码函数浅析
Aug 09 PHP
php将时间差转换为字符串提示
Sep 07 PHP
php中获得视频时间总长度的另一种方法
Sep 15 PHP
获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
Jun 01 PHP
基于PHPExcel的常用方法总结
Jun 13 PHP
PHP生成短网址的3种方法代码实例
Jul 08 PHP
配置php.ini实现PHP文件上传功能
Nov 27 PHP
一个非常实用的php文件上传类
Jul 04 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
ThinkPHP防止重复提交表单的方法实例分析
May 10 PHP
完美实现GIF动画缩略图的php代码
Jan 02 #PHP
php实现无限级分类实现代码(递归方法)
Jan 01 #PHP
php下尝试使用GraphicsMagick的缩略图功能
Jan 01 #PHP
PHP读取XML值的代码(推荐)
Jan 01 #PHP
PHP中simplexml_load_string函数使用说明
Jan 01 #PHP
php xml 入门学习资料
Jan 01 #PHP
PHP+SQL 注入攻击的技术实现以及预防办法
Dec 29 #PHP
You might like
收音机鉴频器对声音的影响和频偏分析
2021/03/02 无线电
配置支持SSI
2006/11/25 PHP
一个PHP的String类代码
2010/04/20 PHP
php微信公众号开发之二级菜单
2018/10/20 PHP
2007/12/23更新创意无限,简单实用(javascript log)
2007/12/24 Javascript
JavaScript 事件记录使用说明
2009/10/20 Javascript
javascript unicode与GBK2312(中文)编码转换方法
2013/11/14 Javascript
javascript实现网页端解压并查看zip文件
2015/12/15 Javascript
使用Curl命令查看请求响应时间方法
2016/11/04 Javascript
详解微信小程序 页面跳转 传递参数
2016/12/08 Javascript
angular+ionic返回上一页并刷新页面
2017/08/08 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
2018/05/04 Javascript
微信小程序scroll-view仿拼多多横向滑动滚动条
2020/04/21 Javascript
微信小程序使用车牌号输入法的示例代码
2019/08/20 Javascript
有趣的JavaScript隐式类型转换操作实例分析
2020/05/02 Javascript
解决vue+router路由跳转不起作用的一项原因
2020/07/19 Javascript
[06:07]DOTA2-DPC中国联赛 正赛 Ehome vs VG 选手采访
2021/03/11 DOTA
讲解python参数和作用域的使用
2013/11/01 Python
在Python中处理字符串之isdigit()方法的使用
2015/05/18 Python
Django与遗留的数据库整合的方法指南
2015/07/24 Python
Python向Excel中插入图片的简单实现方法
2018/04/24 Python
Python中extend和append的区别讲解
2019/01/24 Python
pyqt5 从本地选择图片 并显示在label上的实例
2019/06/13 Python
python函数的万能参数传参详解
2019/07/26 Python
Django model.py表单设置默认值允许为空的操作
2020/05/19 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
2020/06/02 Python
Selenium 安装和简单使用的实现
2020/12/04 Python
探矿工程师自荐信
2014/01/24 职场文书
咖啡馆创业计划书
2014/01/26 职场文书
法人授权委托书
2014/09/16 职场文书
水利局群众路线专题民主生活会发言材料
2014/09/21 职场文书
六一儿童节致辞
2015/07/31 职场文书
学生病假条范文
2015/08/17 职场文书
党风廉政教育心得体会2016
2016/01/22 职场文书
如何书写你的职业生涯规划书?
2019/06/27 职场文书
演讲稿之感恩老师(三篇范文)
2019/09/06 职场文书