通过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
FCKeditor的安装(PHP)
Jan 13 PHP
让Nginx支持ThinkPHP的URL重写和PATHINFO的方法分享
Aug 08 PHP
win7下memCache的安装过程(具体操作步骤)
Jun 28 PHP
php获取服务器端mac和客户端mac的地址支持WIN/LINUX
May 15 PHP
PHP中的socket_read和socket_recv区别详解
Feb 09 PHP
PHP实现根据银行卡号判断银行
Apr 29 PHP
php结合curl实现多线程抓取
Jul 09 PHP
PHP正则获取页面所有图片地址
Mar 23 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 PHP
PHP缓存工具XCache安装与使用方法详解
Apr 09 PHP
php使用QueryList轻松采集js动态渲染页面方法
Sep 11 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
ThinkPHP使用心得分享-分页类Page的用法
2014/05/15 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
2014/12/16 PHP
php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
2016/03/23 PHP
控制打印时页眉角的代码
2007/02/08 Javascript
jquery tab插件制作实现代码
2010/06/22 Javascript
JS简单模拟触发按钮点击功能的方法
2015/11/30 Javascript
js实现上一页下一页的效果【附代码】
2016/03/10 Javascript
JS实现关闭当前页而不弹出提示框的方法
2016/06/22 Javascript
BootStrap入门学习第一篇
2017/08/28 Javascript
详解webpack2+React 实例demo
2017/09/11 Javascript
jquery 键盘事件的使用方法详解
2017/09/13 jQuery
p5.js入门教程之键盘交互
2018/03/19 Javascript
vue全局组件与局部组件使用方法详解
2018/03/29 Javascript
node打造微信个人号机器人的方法示例
2018/04/26 Javascript
关于ckeditor在bootstrap中modal中弹框无法输入的解决方法
2019/09/11 Javascript
详解用js代码触发dom事件的实现方案
2020/06/10 Javascript
微信小程序实现倒计时功能
2020/11/19 Javascript
浅析Python中else语句块的使用技巧
2016/06/16 Python
利用Python中的pandas库对cdn日志进行分析详解
2017/03/07 Python
使用Filter过滤python中的日志输出的实现方法
2019/07/17 Python
Python产生一个数值范围内的不重复的随机数的实现方法
2019/08/21 Python
python中count函数简单用法
2020/01/05 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
2020/02/15 Python
django 多数据库及分库实现方式
2020/04/01 Python
详解Pandas 处理缺失值指令大全
2020/07/30 Python
通过实例解析Python文件操作实现步骤
2020/09/21 Python
各大浏览器 CSS3 和 HTML5 兼容速查表 图文
2010/04/01 HTML / CSS
html5中为audio标签增加停止按钮动作实现方法
2013/01/04 HTML / CSS
上海方立数码笔试题
2013/10/18 面试题
求职自荐信范文格式
2013/11/29 职场文书
幼儿园小班评语大全
2014/04/17 职场文书
2014年政协工作总结
2014/12/09 职场文书
mysql获取指定时间段中所有日期或月份的语句(不设存储过程,不加表)
2021/06/18 MySQL
微软Win11有哪些隐藏功能? windows11多个功能汇总
2021/11/21 数码科技
Spring Data JPA框架的核心概念和Repository接口
2022/04/28 Java/Android
python标准库ElementTree处理xml
2022/05/20 Python