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 相关文章推荐
PHP的栏目导航程序
Oct 09 PHP
phpMyAdmin 安装及问题总结
May 28 PHP
memcached 和 mysql 主从环境下php开发代码详解
May 16 PHP
php数组中删除元素的实现代码
Jun 22 PHP
PHP内置的Math函数效率测试
Dec 01 PHP
PHP判断是否连接上网络的方法
Jul 01 PHP
Laravel 中获取上一篇和下一篇数据
Jul 27 PHP
PHP-FPM运行状态的实时查看及监控详解
Nov 18 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
Jun 06 PHP
php数据库的增删改查 php与javascript之间的交互
Aug 31 PHP
php ajax confirm 删除实例详解
Mar 06 PHP
PHP中命名空间的使用例子
Mar 22 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
phpmyadmin操作流程
2006/10/09 PHP
收集的PHP中与数组相关的函数
2007/03/22 PHP
php print EOF实现方法
2009/05/21 PHP
php 静态变量的初始化
2009/11/15 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
2014/12/15 PHP
js拼接html注意问题示例探讨
2014/07/14 Javascript
使用Chrome调试JavaScript的断点设置和调试技巧
2014/12/16 Javascript
jQuery中DOM树操作之使用反向插入方法实例分析
2015/01/23 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
javascript中去除数组重复元素的实现方法【实例】
2016/04/12 Javascript
jquery插件autocomplete用法示例
2016/07/01 Javascript
jquery根据td给相同tr下其他td赋值的实现方法
2016/10/05 Javascript
VUE中使用MUI方法
2019/02/12 Javascript
vue-cli随机生成port源码的方法
2019/09/02 Javascript
layui 弹出删除确认界面的实例
2019/09/06 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
JavaScript实现点击自制菜单效果
2021/02/02 Javascript
[51:26]VP vs VG 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
解决Python中由于logging模块误用导致的内存泄露
2015/04/23 Python
Python中扩展包的安装方法详解
2017/06/14 Python
Windows 7下Python Web环境搭建图文教程
2018/03/20 Python
python3实现字符串的全排列的方法(无重复字符)
2018/07/07 Python
使用python 写一个静态服务(实战)
2019/06/28 Python
pandas进行时间数据的转换和计算时间差并提取年月日
2019/07/06 Python
python networkx 根据图的权重画图实现
2019/07/10 Python
python add_argument()用法解析
2020/01/29 Python
马来西亚综合购物网站:Lazada马来西亚
2018/06/05 全球购物
四下基层实施方案
2014/03/28 职场文书
社区创先争优承诺书
2014/08/30 职场文书
学习考察心得体会
2014/09/04 职场文书
政府个人对照检查材料思想汇报
2014/10/08 职场文书
初中作文评语
2014/12/25 职场文书
党员评议自我评价
2015/03/03 职场文书
公司门卫岗位职责
2015/04/13 职场文书
2015年银行员工工作总结
2015/04/24 职场文书
DE1107机评
2022/04/05 无线电