通过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
投票管理程序
Oct 09 PHP
PHP 面向对象详解
Sep 13 PHP
Thinkphp中Create方法深入探究
Jun 16 PHP
PHP把小数转成整数3种方法
Jun 30 PHP
PHP自动重命名文件实现方法
Nov 04 PHP
YiiFramework入门知识点总结(图文教程)
Dec 28 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
Apr 11 PHP
Thinkphp开发--集成极光推送
Sep 15 PHP
PHP实现创建一个RPC服务操作示例
Feb 23 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
May 25 PHP
PHP8.0新功能之Match表达式的使用
Jul 19 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代码的53条建议
2008/03/27 PHP
PHP对接微信公众平台消息接口开发流程教程
2014/03/25 PHP
Thinkphp调用Image类生成缩略图的方法
2015/03/07 PHP
php引用和拷贝的区别知识点总结
2019/09/23 PHP
php自动加载代码实例详解
2021/02/26 PHP
javascript的trim,ltrim,rtrim自定义函数
2008/09/21 Javascript
基于JQuery 选择器使用说明介绍
2013/04/18 Javascript
jquery 设置元素相对于另一个元素的top值(实例代码)
2013/11/06 Javascript
JavaScript中for-in遍历方式示例介绍
2014/02/11 Javascript
JQuery实现动态添加删除评论的方法
2015/05/18 Javascript
JavaScript判断按钮被点击的方法
2015/12/13 Javascript
js表单验证实例讲解
2016/03/31 Javascript
JS仿百度自动下拉框模糊匹配提示
2016/07/25 Javascript
基本DOM节点操作
2017/01/17 Javascript
利用js判断手机是否安装某个app的多种方案
2017/02/13 Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
2018/08/08 jQuery
小试小程序云开发(小结)
2019/06/06 Javascript
微信小程序封装多张图片上传api代码实例
2019/12/30 Javascript
小程序实现密码输入框
2020/11/16 Javascript
[05:49]2014DOTA2TI4正赛第二日综述 昔日冠军纷纷落马 VG LGD占尽先机
2014/07/20 DOTA
Python的subprocess模块总结
2014/11/07 Python
python smtplib模块自动收发邮件功能(二)
2018/05/22 Python
Linux下多个Python版本安装教程
2018/08/15 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
2018/09/17 Python
Python 单元测试(unittest)的使用小结
2018/11/14 Python
Python爬虫实战之12306抢票开源
2019/01/24 Python
Python分析彩票记录并预测中奖号码过程详解
2019/07/09 Python
Django 缓存配置Redis使用详解
2019/07/23 Python
基于python plotly交互式图表大全
2019/12/07 Python
Python类如何定义私有变量
2020/02/03 Python
用sleep间隔进行python反爬虫的实例讲解
2020/11/30 Python
css3实现文字扫光渐变动画效果的示例
2017/11/07 HTML / CSS
工程班组长岗位职责
2013/12/30 职场文书
学生意外伤害赔偿协议书
2014/09/17 职场文书
教师党员个人自我评价
2015/03/04 职场文书
opencv深入浅出了解机器学习和深度学习
2022/03/17 Python