通过5个php实例细致说明传值与传引用的区别


Posted in PHP onAugust 08, 2012

哈哈,会用只是初级阶段,要了解原理是什么,这样才能更好去运用,费话不多说
传值:是把实参的值赋值给行参 ,那么对行参的修改,不会影响实参的值
传引用 :真正的以地址的方式传递参数传递以后,行参和实参都是同一个对象,只是他们名字不同而已对行参的修改将影响实参的值
说明:
传值:根copy是一样的。打个比方,我有一?H房子,我给你建筑材料,你建了一个根我的房子一模一样的房子,你在你的房子做什么事都不会影响到我,我在我的房子里做什么事也不会影响到你,彼此独立。
传引用:让我想起了上大学时学习C语言的指针了,感觉差不多。打个比方,我有一?H房子,我给你一把钥匙,我们二个都可以进入这个房子,你在房子做什么都会影响到我。
一,php实例
1,传值

<?php 
$param1=1; //定义变量1 
$param2=2; //定义变量2 
$param2 = $param1; //变量1赋值给变量2 
echo $param2; //显示为1 
?>

2,传引用
<?php 
$param2=1; //定义变量2 
$param1 = &$param2; //将变量2的引用传给变量1 
echo $param2; //显示为1 
$param1 = 2; //把2赋值给变量1 
echo $param2; //显示为2 
?>

3,函数传值
<?php 
//传值 
$param1 = 1; //定义变量1 
function add($param2) //传参数 
{ 
$param2=3; //把3赋值给变量2 
} 
$param3=add($param1); //调用方法add,并将变量1传给变量2 
echo '<br>$param1=='.$param1.'<br>'; //显示为$param1==1 
echo '<br>$param2=='.$param2.'<br>'; //显示为$param2== 因为$param2是局部变量,所以不能影响全局 
echo '<br>$param3=='.$param3.'<br>'; //显示为$param3== 因为add方法没有返回值,所以$param3为空 
?>

4,函数传引用
<?php 
//传值 
$param1 = 1; //定义变量1 
function add(&$param2) //传参数 
{ 
$param2=3; //把3赋值给变量2 
// return $param2; //返回变量2 
} 
echo '<br>$param1=='.$param1.'<br>'; //显示为$param1==1 没对变量1进行操作 
$param3=add($param1); //调用方法add,并将变量1的引用传给变量2 
echo '<br>$param1=='.$param1.'<br>'; //显示为$param1==3 调用变量过程中,$param2的改变影响变量1,虽然没有return 
echo '<br>$param2=='.$param2.'<br>'; //显示为$param2== 因为$param2局部变量,所以不能影响全局 
echo '<br>$param3=='.$param3.'<br>'; //显示为$param3== 如果把方法里面的return注释去掉的话就为$param3==3 
?>

5,函数传引用2
<?php 
//传引用 
$param1 = 1; 
function &add(&$param2) 
{ 
$param2 = 2; 
return $param2; 
} 
$param3=&add($param1); 
$param4=add($param1); 
echo '<br>$param3=='.$param3.'<br>'; //显示为$param3==2 
echo '<br>$param4=='.$param4.'<br>'; //显示为$param4==2 
echo '<br>$param1=='.$param1.'<br>'; //显示为$param1==2 调用变量过程中,$param2的改变影响变量1 
$param3++; 
/*下面显示为$param1==3,这是因为$param2和$param1引用到同一个地方, 
* 返回值前面加了地址符号还是一个引用$param3=&add($param1); 
* 这样$param3,$param2和$param1引用到同一个地方,当$param3++;时, 
* $param1会被改变*/ 
echo '<br>$param1=='.$param1.'<br>'; 
$param4++; 
/* 下面显示为$param1==3,这里为什么是3而不是4呢,这是因为返回值前面没有 
* 地址符号,它不是一个引用所以当$param4改变时不会影响$param1*/ 
echo '<br>$param1=='.$param1.'<br>'; 
?>

哈哈,不过我觉得传引用会好一点,耗的资源少。上面测试没有明显的差距,可能是因为测试数据不够大造成的,如果有更大数据来测试,我想会有明显的不同。
PHP 相关文章推荐
PHP个人网站架设连环讲(一)
Oct 09 PHP
一个用于网络的工具函数库
Oct 09 PHP
php下用cookie统计用户访问网页次数的代码
May 09 PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
Jul 04 PHP
深入apache配置文件httpd.conf的部分参数说明
Jun 28 PHP
PHP解决URL中文GBK乱码问题的两种方法
Jun 03 PHP
php将图片保存为不同尺寸图片的图片类实例
Mar 30 PHP
php简单创建zip压缩文件的方法
Apr 30 PHP
PHP自定义函数获取URL中一级域名的方法
Aug 23 PHP
PHP实现Unicode编码相互转换的方法示例
Nov 17 PHP
PHP实现双链表删除与插入节点的方法示例
Nov 11 PHP
PHP的PDO连接讲解
Jan 24 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
Aug 08 #PHP
php中++i 与 i++ 的区别
Aug 08 #PHP
php中判断文件空目录是否有读写权限的函数代码
Aug 07 #PHP
PHP中全局变量global和$GLOBALS[]的区别分析
Aug 06 #PHP
php一个找二层目录的小东东
Aug 02 #PHP
PHP文章采集URL补全函数(FormatUrl)
Aug 02 #PHP
PHP服务器页面间跳转实现方法
Aug 02 #PHP
You might like
php magic_quotes_gpc的一点认识与分析
2008/08/18 PHP
解析mysql left( right ) join使用on与where筛选的差异
2013/06/18 PHP
浅谈PHP命令执行php文件需要注意的问题
2016/12/16 PHP
提高代码性能技巧谈—以创建千行表格为例
2006/07/01 Javascript
可以支持多中格式的JS键盘
2007/05/02 Javascript
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
Javascript 实现TreeView CheckBox全选效果
2010/01/11 Javascript
几个比较实用的JavaScript 测试及效验工具
2010/04/18 Javascript
jQuery ui插件的使用方法代码实例
2013/05/08 Javascript
5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例
2015/01/29 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
2016/01/14 Javascript
Javascript中的迭代、归并方法详解
2016/06/14 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
2016/06/30 Javascript
jquery常用的12个小功能
2016/07/22 Javascript
几句话带你理解JS中的this、闭包、原型链
2016/09/26 Javascript
js基于myFocus实现轮播图效果
2017/02/14 Javascript
基于JQuery的购物车添加删除以及结算功能示例
2017/03/08 Javascript
浅析JS中的 map, filter, some, every, forEach, for in, for of 用法总结
2017/03/29 Javascript
ES6顶层对象、global对象实例分析
2019/06/14 Javascript
Python字符遍历的艺术
2008/09/06 Python
Python实现基于权重的随机数2种方法
2015/04/28 Python
python中sys.argv参数用法实例分析
2015/05/20 Python
深入理解Python变量与常量
2016/06/02 Python
Python3实现从排序数组中删除重复项算法分析
2019/04/03 Python
python实现高斯投影正反算方式
2020/01/17 Python
安装并免费使用Pycharm专业版(学生/教师)
2020/09/24 Python
Anaconda详细安装步骤图文教程
2020/11/12 Python
Python的Tqdm模块实现进度条配置
2021/02/24 Python
美国最大的网络男装服装品牌:Bonobos
2017/05/25 全球购物
怎样在程序里获得一个空指针
2015/01/24 面试题
shell的种类有哪些
2015/04/15 面试题
专升本个人自我评价
2013/12/22 职场文书
农民致富事迹材料
2014/01/23 职场文书
生产部厂长职位说明书
2014/03/03 职场文书
做人民满意的公务员活动方案
2014/08/25 职场文书
2015年幼儿园学前班工作总结
2015/05/18 职场文书