php引用传递


Posted in PHP onApril 01, 2021

引用传递:将一个变量通过引用传递给函数,这样该函数就可以修改其参数的值。被调函数的形式参数虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址
注:在函数调用时没有引用符号——只有函数定义中有。

主要是实参和形参的相互影响性。引用传递:形参的改变会影响实参 , 值传递:赋值,不相互影响 。 按照按值传递的做法来传值时,如果需要原来的值发生改变,则需要在进行代码复制,若是值够大或者是一大串字符串时,会使代码比较多,重复,而引用传递则不需要复制PHP代码,对提高性能这一个方面有很大的优势。

function adduce(&$string) // 引入变量,使用同一个存储地址
	{
	    $string .= '我是引用传递.';
	    echo $string;// 输出 '我是外部字符串, 我是引用传递.'
	}
	
	$str = '我是外部字符串, ';
	adduce($str);
	echo $str;    // 输出 '我是外部字符串, 我是引用传递.'
  • $str输出:
    • 我是外部字符串, 我是引用传递.
  • $string输出:
    • 我是外部字符串, 我是引用传递.

以上示例证明 $str更改了地址。新地址与 $string 共用同一值

如果没有这个&符号,请看示例

function adduce2($string)
	{
	    $string .= '内部字符串.';
	    echo $string;// 输出 '我是外部字符串, 我是引用传递.'
	}
	
	$str = '外部字符串, ';
	adduce2($str);
	echo $str;    // 输出 '外部字符串, '
  • $str输出:
    • 外部字符串,
  • $string输出:
    • 我是外部字符串, 我是引用传递.

以上示例证明 $str内容不变。与 $string 互不影响

函数的引用传递

//示例1
	$a = 1;
	function &func(&$a) {
	  return $a;
	}
	$b = func($a);	// 这里不是函数引用传递
	$b = 2;
	echo "a: $a, b: $b, c: $c. <br />";//输出a: 1, b: 2, c: 1.   可见对$b的修改不会影响$a
-----------------------------------------------------------------------------------------------------------------------------------
	//示例2
	$a = 1;
	function &adduce(&$a) {
	    return $a;
	}
	$c = &adduce($a);	// 这是函数引用传递,$c和$a引用同一个值
	$c = 3;
	echo "a: $a, b: $b, c: $c. <br />";//输出a: 3, b: 2, c: 3.   可见对$c的修改会影响$a
PHP 相关文章推荐
php 移除数组重复元素的一点说明
Nov 27 PHP
php知道与问问的采集插件代码
Oct 12 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
Nov 19 PHP
windows8.1下Apache+Php+MySQL配置步骤
Oct 30 PHP
浅谈PHP中foreach/in_array的使用
Nov 02 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
Feb 03 PHP
PHP CURL post数据报错 failed creating formpost data
Oct 16 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
Feb 15 PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
Mar 14 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
Oct 10 PHP
tp5框架的增删改查操作示例
Oct 31 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
Apr 26 PHP
PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
Apr 01 #PHP
PHP判断是否是json字符串
Apr 01 #PHP
php TP5框架生成二维码链接
Apr 01 #PHP
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
Apr 01 #PHP
phpQuery解析HTML乱码问题(补充官网未列出的乱码解决方案)
Apr 01 #PHP
PHP控制循环操作的时间
Apr 01 #PHP
php字符串倒叙
Apr 01 #PHP
You might like
php实现批量压缩图片文件大小的脚本
2014/07/04 PHP
destoon实现调用热门关键字的方法
2014/07/15 PHP
php版微信返回用户text输入的方法
2016/11/14 PHP
详解yii2实现分库分表的方案与思路
2017/02/03 PHP
tp5框架使用composer实现日志记录功能示例
2019/01/10 PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
2020/01/25 PHP
javascript Discuz代码中的msn聊天小功能
2008/05/25 Javascript
用JavaScript实现UrlEncode和UrlDecode的脚本代码
2008/07/23 Javascript
JavaScript URL参数读取改进版
2009/01/16 Javascript
JavaScript中继承的一些示例方法与属性参考
2010/08/07 Javascript
用jquery实现点击栏目背景色改变
2012/12/10 Javascript
判断一个变量是数组Array类型的方法
2013/09/16 Javascript
jquery next nextAll nextUntil siblings的区别介绍
2013/10/05 Javascript
JS关闭窗口与JS关闭页面的几种方法小结
2013/12/17 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
2014/10/31 Javascript
值得分享的JavaScript实现图片轮播组件
2016/11/21 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
2017/01/14 Javascript
vue router下的html5 history在iis服务器上的设置方法
2017/10/18 Javascript
详解JS函数stack size计算方法
2018/06/18 Javascript
基于nodejs的雪碧图制作工具的示例代码
2018/11/05 NodeJs
JavaScript动态检测密码强度原理及实现方法详解
2019/06/11 Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
2019/10/26 Javascript
vue中封装axios并实现api接口的统一管理
2020/12/25 Vue.js
vue 动态创建组件的两种方法
2020/12/31 Vue.js
python利用elaphe制作二维条形码实现代码
2012/05/25 Python
Python获取远程文件大小的函数代码分享
2014/05/13 Python
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
Python2.x版本中maketrans()方法的使用介绍
2015/05/19 Python
Python如何读取文件中图片格式
2020/01/13 Python
pandas中ix的使用详细讲解
2020/03/09 Python
Ubuntu中配置TensorFlow使用环境的方法
2020/04/21 Python
python读取图像矩阵文件并转换为向量实例
2020/06/18 Python
Pytest如何使用skip跳过执行测试
2020/08/13 Python
餐饮主管岗位职责
2013/12/10 职场文书
药品业务员岗位职责
2014/04/17 职场文书
css filter和getUserMedia的联合使用
2022/02/24 HTML / CSS