通过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 相关文章推荐
自己前几天写的无限分类类
Feb 14 PHP
ajax+php打造进度条 readyState各状态
Mar 20 PHP
php学习之简单计算器实现代码
Jun 09 PHP
浅析php学习的路线图
Jul 10 PHP
php下载excel无法打开的解决方法
Dec 24 PHP
PHP常用函数和常见疑难问题解答
Mar 05 PHP
thinkphp实现数组分页示例
Apr 13 PHP
PHP中array_slice函数用法实例详解
Nov 25 PHP
使用Composer安装Yii框架的方法
Mar 15 PHP
php简单实现批量上传图片的方法
May 09 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
May 29 PHP
PHP高并发和大流量解决方案整理
Dec 24 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创建PDF中文文档
2006/10/09 PHP
PHP 函数学习简单小结
2010/07/08 PHP
给初学者的30条PHP最佳实践(荒野无灯)
2011/08/02 PHP
浅析memcache启动以及telnet命令详解
2013/06/28 PHP
非常好的js代码
2006/06/27 Javascript
JS版网站风格切换实例代码
2008/10/06 Javascript
两个select之间option的互相添加操作(jquery实现)
2009/11/12 Javascript
Javascript之旅 对象的原型链之由来
2010/08/25 Javascript
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
Flex通过JS获取客户端IP和计算机名的实例代码
2013/11/21 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
2015/08/12 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
2016/07/28 Javascript
基于AGS JS开发自定义贴图图层
2017/03/31 Javascript
js下载文件并修改文件名
2017/05/08 Javascript
关于vuejs中v-if和v-show的区别及v-show不起作用问题
2018/03/26 Javascript
最后说说Vue2 SSR 的 Cookies 问题
2018/05/25 Javascript
JSON的parse()方法介绍
2019/01/31 Javascript
qrcode生成二维码微信长按无法识别问题的解决
2019/04/04 Javascript
策略模式实现 Vue 动态表单验证的方法
2019/09/16 Javascript
vue-cli设置publicPath小记
2020/04/14 Javascript
JavaScript中的函数式编程详解
2020/08/22 Javascript
详解JavaScript类型判断的四种方法
2020/10/21 Javascript
vite2.0+vue3移动端项目实战详解
2021/03/03 Vue.js
[01:06]DOTA2隆重推出2016冬季勇士令状 内含上海特级锦标赛互动指南
2016/02/17 DOTA
利用python将图片转换成excel文档格式
2017/12/30 Python
对Python 文件夹遍历和文件查找的实例讲解
2018/04/26 Python
Python3使用pandas模块读写excel操作示例
2018/07/03 Python
python 项目目录结构设置
2020/02/14 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
2020/03/06 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
2020/07/03 Python
Python ellipsis 的用法详解
2020/11/20 Python
在校生自我鉴定
2014/01/23 职场文书
公司办公室岗位职责
2014/03/19 职场文书
家长评语怎么写
2014/12/30 职场文书
优秀共产党员主要事迹材料
2015/11/05 职场文书
JavaScript声明变量和数据类型的转换
2022/04/12 Javascript