通过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学习笔记之三 数据库基本操作
Jan 17 PHP
PHP获取文件夹内文件数的方法
Mar 12 PHP
php准确获取文件MIME类型的方法
Jun 17 PHP
php实现的递归提成方案实例
Nov 14 PHP
PHP编写的图片验证码类文件分享
Jun 06 PHP
php mongodb操作类 带几个简单的例子
Aug 25 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
Oct 08 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
Oct 18 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
Jun 09 PHP
php检查函数必传参数是否存在的实例详解
Aug 28 PHP
ThinkPHP实现的rsa非对称加密类示例
May 29 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
日本因肺炎疫情影响,这几部动漫推延播放!
2020/03/03 日漫
php 目录与文件处理-郑阿奇(续)
2011/07/04 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
javascript中的有名函数和无名函数
2007/10/17 Javascript
javascript 常用关键字列表集合
2007/12/04 Javascript
用JavaScript显示随机图像或引用
2009/04/21 Javascript
JavaScript 字符串与数组转换函数[不用split与join]
2009/12/13 Javascript
百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome
2010/04/13 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件
2010/08/24 Javascript
选择器中含有空格在使用示例及注意事项
2013/07/31 Javascript
AngularJS身份验证的方法
2016/02/17 Javascript
jQuery自制提示框tooltip改进版
2016/08/01 Javascript
react-router中的属性详解
2017/06/01 Javascript
bootstrap confirmation按钮提示组件使用详解
2017/08/22 Javascript
从源码看angular/material2 中 dialog模块的实现方法
2017/10/18 Javascript
Servlet3.0与纯javascript通过Ajax交互的实例详解
2018/03/18 Javascript
javascript实现视频弹幕效果(两个版本)
2019/11/28 Javascript
JavaScript实现好看的跟随彩色气泡效果
2020/02/06 Javascript
[02:20]DOTA2英雄基础教程 黑暗贤者
2013/12/19 DOTA
python轻松实现代码编码格式转换
2015/03/26 Python
python去除文件中空格、Tab及回车的方法
2016/04/12 Python
Linux 发邮件磁盘空间监控(python)
2016/04/23 Python
Python中django学习心得
2017/12/06 Python
python编写弹球游戏的实现代码
2018/03/12 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
2020/02/27 Python
python入门教程之基本算术运算符
2020/11/13 Python
10个很棒的 CSS3 开发工具 推荐
2011/05/16 HTML / CSS
html5 Canvas实现图片旋转的示例
2018/01/15 HTML / CSS
北欧最好的童装网上商店:Babyshop
2019/09/15 全球购物
公司门卫管理制度
2014/02/01 职场文书
小学数学国培感言
2014/03/10 职场文书
竞聘书格式及范文
2014/03/31 职场文书
小学音乐教师个人工作总结
2015/02/05 职场文书
庆祝教师节新闻稿
2015/07/17 职场文书
党风廉政承诺书2016
2016/03/25 职场文书
Python实现归一化算法详情
2022/03/18 Python