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页码形式分页函数支持静态化地址及ajax分页
Mar 28 PHP
php实现发送微信模板消息的方法
Mar 07 PHP
php相对当前文件include其它文件的方法
Mar 13 PHP
php实现Session存储到Redis
Nov 11 PHP
php实现购物车功能(上)
Jul 23 PHP
Zend Framework动作助手FlashMessenger用法详解
Mar 05 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
Jun 19 PHP
PHP基于关联数组20行代码搞定约瑟夫问题示例
Nov 07 PHP
PHPMAILER实现PHP发邮件功能
Apr 18 PHP
PHP+jQuery实现即点即改功能示例
Feb 21 PHP
详解php中生成标准uuid(guid)的方法
Apr 28 PHP
thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例
Jul 03 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
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
PHP定时更新程序设计思路分享
2014/06/10 PHP
微信公众号判断用户是否已关注php代码解析
2016/06/24 PHP
php实现的rc4加密解密类定义与用法示例
2018/08/16 PHP
Mac下关于PHP环境和扩展的安装详解
2019/10/17 PHP
php使用Swoole实现毫秒级定时任务的方法
2020/09/04 PHP
JavaScript XML操作 封装类
2009/07/01 Javascript
7个Javascript地图脚本整理
2009/10/20 Javascript
解决3.01版的jquery.form.js中文乱码问题的解决方法
2012/03/08 Javascript
jquery下div 的resize事件示例代码
2014/03/09 Javascript
jquery实现的省市区三级联动
2015/04/02 Javascript
简单实现jQuery多选框功能
2017/01/09 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
Vue.js组件间通信方式总结【推荐】
2018/11/23 Javascript
vue实现图片按比例缩放问题操作
2020/08/11 Javascript
jQuery实现异步上传一个或多个文件
2020/08/17 jQuery
Vue-cli打包后如何本地查看的操作
2020/09/02 Javascript
python中requests模块的使用方法
2015/04/08 Python
举例讲解Python中的算数运算符的用法
2015/05/13 Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
2017/07/24 Python
python使用magic模块进行文件类型识别方法
2018/12/08 Python
将python图片转为二进制文本的实例
2019/01/24 Python
python实现ip地址的包含关系判断
2020/02/07 Python
idea2020手动安装python插件的实现方法
2020/07/17 Python
CSS3图片旋转特效(360/60/-360度)
2013/10/10 HTML / CSS
CSS3径向渐变之大鱼吃小鱼之孤单的大鱼
2016/04/26 HTML / CSS
英国花园药房: The Garden Pharmacy
2017/12/28 全球购物
一套C#面试题
2013/10/09 面试题
城建学院毕业生自荐信
2014/01/31 职场文书
会员活动策划方案
2014/08/19 职场文书
党员领导干部民主生活会批评与自我批评发言
2014/09/28 职场文书
答谢词范文
2015/01/05 职场文书
情侣之间的道歉短信
2015/05/12 职场文书
初二数学教学反思
2016/02/17 职场文书
剑指Offer之Java算法习题精讲二叉树的构造和遍历
2022/03/21 Java/Android
Python通过loop.run_in_executor执行同步代码 同步变为异步
2022/04/11 Python