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 相关文章推荐
MVC模式的PHP实现
Oct 09 PHP
mysql5写入和读出乱码解决
Nov 25 PHP
PHP 变量类型的强制转换
Oct 23 PHP
php addslashes及其他清除空格的方法是不安全的
Jan 25 PHP
php session_start()出错原因分析及解决方法
Oct 28 PHP
PHP函数extension_loaded()用法实例
Jan 19 PHP
php正则匹配文章中的远程图片地址并下载图片至本地
Sep 29 PHP
表单提交错误后返回内容消失问题的解决方法(PHP网站)
Oct 20 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
Dec 17 PHP
PHP迭代与递归实现无限级分类
Aug 28 PHP
PHP使用curl_multi实现并发请求的方法示例
Apr 29 PHP
对php 判断http还是https,以及获得当前url的方法详解
Jan 15 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
PHP语法速查表
2006/12/06 PHP
用PHP实现弹出消息提示框的两种方法
2013/12/17 PHP
Composer设置忽略版本匹配的方法
2016/04/27 PHP
PHP 数组基本操作小结(推荐)
2016/06/13 PHP
JavaScript实现删除电脑的关机键
2016/07/26 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
2019/10/30 PHP
深入聊聊Array的sort方法的使用技巧.详细点评protype.js中的sortBy方法
2007/04/12 Javascript
JQuery入门——用映射方式绑定不同事件应用示例
2013/02/05 Javascript
JavaScript中发布/订阅模式的简单实例
2014/11/05 Javascript
深入理解JavaScript系列(50):Function模式(下篇)
2015/03/04 Javascript
jquery实现标题字体变换的滑动门菜单效果
2015/09/07 Javascript
如何实现JavaScript动态加载CSS和JS文件
2020/12/28 Javascript
Node.js实用代码段之获取Buffer对象字节长度
2016/03/17 Javascript
如何用JavaScript实现动态修改CSS样式表
2016/05/20 Javascript
解析浏览器端的AJAX缓存机制
2016/06/21 Javascript
JS判断输入字符串长度实例代码(汉字算两个字符,字母数字算一个)
2016/08/02 Javascript
基于jQuery代码实现圆形菜单展开收缩效果
2017/02/13 Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
2017/04/25 Javascript
微信小程序淘宝首页双排图片布局排版代码(推荐)
2020/10/29 Javascript
解决Tensorflow使用pip安装后没有model目录的问题
2018/06/13 Python
如何优雅地改进Django中的模板碎片缓存详解
2018/07/04 Python
IronPython连接MySQL的方法步骤
2019/12/27 Python
Python加速程序运行的方法
2020/07/29 Python
五款漂亮的纯CSS3动画按钮的实例教程
2014/11/21 HTML / CSS
使用Html5中的cavas画一面国旗
2019/09/25 HTML / CSS
意大利中国电子产品购物网站:Geekmall.com
2019/09/30 全球购物
SK-II神仙水美国官网:SK-II美国
2020/02/25 全球购物
学习雷锋演讲稿
2014/05/10 职场文书
计算机网络专业自荐书
2014/06/09 职场文书
节电标语大全
2014/06/23 职场文书
中职三好学生事迹材料
2014/08/24 职场文书
党员演讲稿
2014/09/04 职场文书
2014年行政部工作总结
2014/11/19 职场文书
建党伟业观后感
2015/06/01 职场文书
导游词之南京汤山温泉
2019/11/26 职场文书