通过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 相关文章推荐
计数器详细设计
Oct 09 PHP
Apache2 httpd.conf 中文版
Nov 17 PHP
php中批量修改文件后缀名的函数代码
Oct 23 PHP
基于php常用正则表达式的整理汇总
Jun 08 PHP
PHP实现对站点内容外部链接的过滤方法
Sep 10 PHP
PHP使用ob_start生成html页面的方法
Nov 07 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
May 17 PHP
PHP入门教程之PHP操作MySQL的方法分析
Sep 11 PHP
PHP 500报错的快速解决方法
Dec 14 PHP
PHP合并数组函数array_merge用法分析
Feb 17 PHP
PHP魔术方法之__call与__callStatic使用方法
Jul 23 PHP
PHP配置ZendOpcache插件加速
Feb 14 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
使用apache模块rewrite_module (转)
2007/02/14 PHP
PHP5中Cookie与 Session使用详解
2013/04/30 PHP
使用PHP遍历文件目录与清除目录中文件的实现详解
2013/06/24 PHP
php常用数学函数汇总
2014/11/21 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
2016/06/13 PHP
curl 出现错误的调试方法(必看)
2017/02/13 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
JavaScript 学习笔记(十四) 正则表达式
2010/01/22 Javascript
javascript中键盘事件用法实例分析
2015/01/30 Javascript
AngularJS directive返回对象属性详解
2016/03/28 Javascript
js变量提升深入理解
2016/09/16 Javascript
文本溢出插件jquery.dotdotdot.js使用方法详解
2017/06/22 jQuery
React Native 截屏组件的示例代码
2017/12/06 Javascript
vue服务端渲染页面缓存和组件缓存的实例详解
2018/09/18 Javascript
vue移动端弹框组件的实例
2018/09/25 Javascript
Nodejs对postgresql基本操作的封装方法
2019/02/20 NodeJs
js计算最大公约数和最小公倍数代码实例
2019/09/11 Javascript
[01:08:57]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第二场
2014/05/24 DOTA
python使用wxpython开发简单记事本的方法
2015/05/20 Python
python 性能提升的几种方法
2016/07/15 Python
基于python3 类的属性、方法、封装、继承实例讲解
2017/09/19 Python
python分布式环境下的限流器的示例
2017/10/26 Python
Linux下python3.6.1环境配置教程
2018/09/26 Python
python实现朴素贝叶斯算法
2018/11/19 Python
PyCharm安装Markdown插件的两种方法
2019/06/24 Python
python3 mmh3安装及使用方法
2019/10/09 Python
Python使用贪婪算法解决问题
2019/10/22 Python
Beach Bunny Swimwear官网:设计师泳装和性感比基尼
2019/03/13 全球购物
公交公司毕业生求职信
2014/02/15 职场文书
《美丽的黄昏》教学反思
2014/02/28 职场文书
餐饮店长岗位职责
2015/04/14 职场文书
财务统计员岗位职责
2015/04/14 职场文书
消防验收申请报告
2015/05/15 职场文书
2016教师学习党章心得体会
2016/01/15 职场文书
Python装饰器详细介绍
2022/03/25 Python
MySQL选择合适的备份策略和备份工具
2022/06/01 MySQL