通过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里的JS打印函数
Oct 09 PHP
javascript,php获取函数参数对象的代码
Feb 03 PHP
php使用curl存储cookie的示例
Mar 31 PHP
PHP比你想象的好得多
Nov 27 PHP
php实现遍历目录并删除指定文件中指定内容
Jan 21 PHP
smarty自定义函数htmlcheckboxes用法实例
Jan 22 PHP
php带抄送和密件抄送的邮件发送方法
Mar 20 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
May 31 PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 PHP
PHP内置函数生成随机数实例
Jan 18 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
Feb 18 PHP
php实现文件上传基本验证
Mar 04 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
Protoss魔法科技
2020/03/14 星际争霸
PHP使用递归方式列出当前目录下所有文件的方法
2015/06/02 PHP
快速解决PHP调用Word组件DCOM权限的问题
2017/12/27 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
2020/11/23 PHP
Extjs学习笔记之三 extjs form更多的表单项
2010/01/07 Javascript
javascript 得到变量类型的函数
2010/05/19 Javascript
form.submit()不能提交表单的原因分析
2014/10/23 Javascript
jQuery源码解读之removeClass()方法分析
2015/02/20 Javascript
关于javascript中dataset的问题小结
2015/11/16 Javascript
js全选按钮的实现方法
2015/11/17 Javascript
JavaScript使用DeviceOne开发实战(三)仿微信应用
2015/12/02 Javascript
简单理解vue中el、template、replace元素
2016/10/27 Javascript
JavaScript 中对象的深拷贝
2016/12/04 Javascript
JavaScript中捕获/阻止捕获、冒泡/阻止冒泡方法
2016/12/07 Javascript
vue实现点击关注后及时更新列表功能
2018/06/26 Javascript
JavaScript 实现HTML DOM增删改查操作的常见方法详解
2020/01/04 Javascript
[03:57]DOTA2英雄梦之声_第03期_幻影刺客
2014/06/21 DOTA
利用python爬取软考试题之ip自动代理
2017/03/28 Python
Python实现获取命令行输出结果的方法
2017/06/10 Python
python tkinter界面居中显示的方法
2018/10/11 Python
python定时按日期备份MySQL数据并压缩
2019/04/19 Python
Python使用线程来接收串口数据的示例
2019/07/02 Python
150行Python代码实现带界面的数独游戏
2020/04/04 Python
Python json转字典字符方法实例解析
2020/04/13 Python
numpy矩阵数值太多不能全部显示的解决
2020/05/14 Python
python3通过qq邮箱发送邮件以及附件
2020/05/20 Python
Python用类实现扑克牌发牌的示例代码
2020/06/01 Python
详解CSS3 filter:drop-shadow滤镜与box-shadow区别与应用
2020/08/24 HTML / CSS
美国婚礼装饰和活动用品批发供应商:Event Decor Direct
2018/10/12 全球购物
迪斯尼假期(欧洲、中东及非洲):Disney Holidays EMEA
2021/02/15 全球购物
Currentbody德国站:健康与美容技术专家
2020/04/05 全球购物
一名毕业生的自我鉴定
2013/12/04 职场文书
运动会入场解说词300字
2014/01/25 职场文书
旅游网创业计划书
2014/01/31 职场文书
企业文化标语口号
2014/06/09 职场文书
最新农村养殖致富:资金投入较低的创业项目有哪些?
2019/09/26 职场文书