通过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无限级可伸缩菜单详解(简单易懂)
Jan 02 PHP
奇怪的PHP引用效率问题分析
Mar 23 PHP
浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法
Jan 11 PHP
PHP 获取文件路径(灵活应用__FILE__)
Feb 15 PHP
Memcached常用命令以及使用说明详解
Jun 27 PHP
zend framework文件上传功能实例代码
Dec 25 PHP
PHP类相关知识点实例总结
Sep 28 PHP
PHP实现随机生成水印图片功能
Mar 22 PHP
PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
May 23 PHP
如何让PHP编码更加好看利于阅读
May 12 PHP
laravel实现按月或天或小时统计mysql数据的方法
Oct 09 PHP
PHP中通过getopt解析GNU C风格命令行选项
Nov 18 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
桌面中心(三)修改数据库
2006/10/09 PHP
php中mail函数发送邮件失败的解决方法
2014/12/24 PHP
PHP实现图片自动清理的方法
2015/07/08 PHP
PHP进阶学习之命名空间基本用法分析
2019/06/18 PHP
splice slice区别
2006/10/09 Javascript
IE6下CSS图片缓存问题解决方法
2010/12/09 Javascript
IE的fireEvent方法概述及应用
2013/02/22 Javascript
js 去除字符串第一位逗号的方法
2014/06/07 Javascript
nodejs教程之环境安装及运行
2014/11/21 NodeJs
javascript实现十秒钟后注册按钮可点击的方法
2015/05/13 Javascript
js中unicode转码方法详解
2015/10/09 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
Vue v2.5 调整和更新不完全问题
2017/10/24 Javascript
一篇文章,教你学会Vue CLI 插件开发
2019/04/17 Javascript
Vue项目中ESlint规范示例代码
2019/07/04 Javascript
vue实现动态表格提交参数动态生成控件的操作
2020/11/09 Javascript
JavaScript实现网页留言板功能
2020/11/23 Javascript
10分钟学会js处理json的常用方法
2020/12/06 Javascript
[01:00:49]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第二场 1月31日
2021/03/11 DOTA
用python读写excel的方法
2014/11/18 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
2017/11/15 Python
python实现kMeans算法
2017/12/21 Python
Pycharm 设置默认头的图文教程
2019/01/17 Python
Python面向对象程序设计类的封装与继承用法示例
2019/04/12 Python
利用anaconda保证64位和32位的python共存
2021/03/09 Python
python tkinter 设置窗口大小不可缩放实例
2020/03/04 Python
Python request使用方法及问题总结
2020/04/26 Python
详解基于python的全局与局部序列比对的实现(DNA)
2020/10/07 Python
使用CSS3来实现滚动视差效果的教程
2015/08/24 HTML / CSS
草莓巧克力:Shari’s Berries
2017/02/07 全球购物
世界最大的票务市场:viagogo
2017/02/16 全球购物
台湾深度自由行旅游平台:Tripbaa趣吧
2017/10/10 全球购物
管理科学大学生求职信
2013/11/13 职场文书
Django实现聊天机器人
2021/05/31 Python
python周期任务调度工具Schedule使用详解
2021/11/23 Python
利用JuiceFS使MySQL 备份验证性能提升 10 倍
2022/03/17 MySQL