通过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写的小东西
Dec 06 PHP
php 安全过滤函数代码
May 07 PHP
PHP中usort在值相同时改变原始位置问题的解决方法
Nov 27 PHP
PHP文件注释标记及规范小结
Apr 01 PHP
PHP的MVC模式实现原理分析(一相简单的MVC框架范例)
Apr 29 PHP
PHP网站开发中常用的8个小技巧
Feb 13 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
Sep 10 PHP
php实现贪吃蛇小游戏
Jul 26 PHP
php PDO异常处理详解
Nov 20 PHP
php生出随机字符串
Jul 06 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
Oct 14 PHP
PHP封装的分页类与简单用法示例
Feb 25 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函数array_flip()在重复数组元素删除中的作用
2013/06/27 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
2014/12/18 PHP
PHP单例模式详细介绍
2015/07/01 PHP
php获取当前月与上个月月初及月末时间戳的方法
2016/12/05 PHP
PHP生成推广海报的方法分享
2018/04/22 PHP
了解jQuery技巧来提高你的代码
2010/01/08 Javascript
js下关于onmouseout、事件冒泡的问题经验小结
2010/12/09 Javascript
javascript对象的使用和属性操作示例详解
2014/03/02 Javascript
JavaScript中的函数重载深入理解
2014/08/04 Javascript
js实现的下拉框二级联动效果
2016/04/30 Javascript
jquery动态添加文本并获取值的方法
2016/10/12 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
2017/03/21 Javascript
基于vue2实现上拉加载功能
2017/11/28 Javascript
利用node.js如何创建子进程详解
2017/12/09 Javascript
js生成word中图片处理方法
2018/01/06 Javascript
Angular中sweetalert弹框的基本使用教程
2018/07/22 Javascript
js canvas实现写字动画效果
2018/11/30 Javascript
详解vue项目打包步骤
2019/03/29 Javascript
layer.open组件获取弹出层页面变量、函数的实例
2019/09/25 Javascript
vue使用lodop打印控件实现浏览器兼容打印的方法
2021/02/07 Vue.js
[01:04:35]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第一场
2018/04/04 DOTA
python基础教程之获取本机ip数据包示例
2014/02/10 Python
Python使用asyncio包处理并发详解
2017/09/09 Python
完美解决python3.7 pip升级 拒绝访问问题
2019/07/12 Python
Python FTP文件定时自动下载实现过程解析
2019/11/12 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
2020/06/14 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
2020/10/30 Python
Keras保存模型并载入模型继续训练的实现
2021/02/20 Python
Geekbuying波兰:购买中国电子产品
2019/10/20 全球购物
Perfume’s Club英国官网:购买香水和护肤品
2019/11/02 全球购物
物流管理应届生求职信
2013/11/07 职场文书
财务方面个人工作的自我评价
2013/12/28 职场文书
营销团队口号
2014/06/06 职场文书
村委会贫困证明范文
2014/09/21 职场文书
伏羲庙导游词
2015/02/09 职场文书
python not运算符的实例用法
2021/06/30 Python