通过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面向对象全攻略 (十七) 自动加载类
Sep 30 PHP
apache+codeigniter 通过.htcaccess做动态二级域名解析
Jul 01 PHP
很让人受教的 提高php代码质量36计
Sep 05 PHP
phpexcel导出excel的颜色和网页中的颜色显示不一致
Dec 11 PHP
微信公众平台天气预报功能开发
Jul 06 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
Aug 25 PHP
php生成图片缩略图的方法
Apr 07 PHP
php获取错误信息的方法
Jul 17 PHP
php自定义时间转换函数示例
Dec 07 PHP
Laravel框架中自定义模板指令总结
Dec 17 PHP
php json转换相关知识(小结)
Dec 21 PHP
PHP远程连接oracle数据库操作实现方法图文详解
Apr 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
一个SQL管理员的web接口
2006/10/09 PHP
解析PHP正则提取或替换img标记属性
2013/06/26 PHP
yii2实现Ueditor百度编辑器的示例代码
2018/11/02 PHP
基于jquery的表格排序
2010/09/11 Javascript
js阻止默认事件与js阻止事件冒泡示例分享 js阻止冒泡事件
2014/01/27 Javascript
很棒的Bootstrap选项卡切换效果
2016/07/01 Javascript
前端程序员必须知道的高性能Javascript知识
2016/08/24 Javascript
简单的js计算器实现
2016/10/26 Javascript
AngularJS实现根据变量改变动态加载模板的方法
2016/11/04 Javascript
详解JavaScript中return的用法
2017/05/08 Javascript
详解vue-router 2.0 常用基础知识点之router-link
2017/05/10 Javascript
vue用Object.defineProperty手写一个简单的双向绑定的示例
2018/07/09 Javascript
vue自定义指令用法经典实例小结
2019/03/16 Javascript
详解Vue前端生产环境发布配置实战篇
2019/05/07 Javascript
Node.JS在命令行中检查Chrome浏览器是否安装并打开指定网址
2019/05/21 Javascript
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
绘制微信小程序验证码功能的实例代码
2021/01/05 Javascript
[41:37]DOTA2北京网鱼队选拔赛——冲击职业之路
2015/04/13 DOTA
python开发简易版在线音乐播放器
2017/03/03 Python
Python加密方法小结【md5,base64,sha1】
2017/07/13 Python
详解python字节码
2018/02/07 Python
python多线程与多进程及其区别详解
2019/08/08 Python
计算Python Numpy向量之间的欧氏距离实例
2020/05/22 Python
python 实现图像快速替换某种颜色
2020/06/04 Python
Python把图片转化为pdf代码实例
2020/07/28 Python
Exoticca英国:以最优惠的价格提供豪华异国情调旅行
2018/10/18 全球购物
什么是ARP(Address Resolution Protocol)地址解析协议
2013/10/31 面试题
大学生个人自荐信
2014/02/24 职场文书
个人借款担保书
2014/04/02 职场文书
劳动竞赛口号
2014/06/16 职场文书
党员批评与自我批评发言稿
2014/10/14 职场文书
运动会运动员赞词
2015/07/22 职场文书
消防宣传标语大全
2015/08/03 职场文书
人事行政部各岗位职责说明书!
2019/07/15 职场文书
创业计划书之奶茶店开店方案范本!
2019/08/06 职场文书
python中的被动信息搜集
2021/04/29 Python