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实现多服务器session共享之NFS共享的方法
Mar 16 PHP
php面向对象的方法重载两种版本比较
Sep 08 PHP
elgg 获取文件图标地址的方法
Mar 20 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
Apr 18 PHP
php 无法加载mcrypt.dll的解决办法
Apr 03 PHP
spl_autoload_register与autoload的区别详解
Jun 03 PHP
php全局变量和类配合使用深刻理解
Jun 05 PHP
php中magic_quotes_gpc对unserialize的影响分析
Dec 16 PHP
Symfony2安装的方法(2种方法)
Feb 04 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
May 17 PHP
php基于闭包实现函数的自调用(递归)实例分析
Nov 11 PHP
详解php中生成标准uuid(guid)的方法
Apr 28 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使浏览器直接下载pdf文件的方法
2013/11/15 PHP
php+ajax实现无刷新分页的方法
2014/11/04 PHP
php中memcache 基本操作实例
2015/05/17 PHP
extjs 学习笔记(二) Ext.Element类
2009/10/13 Javascript
javascript模版引擎-tmpl的bug修复与性能优化分析
2011/10/23 Javascript
JavaScript Memoization 让函数也有记忆功能
2011/10/27 Javascript
jquery自动切换tabs选项卡的具体实现
2013/12/24 Javascript
jQuery对Select的操作大集合(收藏)
2013/12/28 Javascript
js动态移动滚动条至底部示例代码
2014/04/24 Javascript
jQuery中innerHeight()方法用法实例
2015/01/19 Javascript
javascript设计模式之对象工厂函数与构造函数详解
2015/07/30 Javascript
Js 获取当前函数参数对象的实现代码
2016/06/20 Javascript
React如何利用相对于根目录进行引用组件详解
2017/10/09 Javascript
浅谈vue项目如何打包扔向服务器
2018/05/08 Javascript
Vue框架里使用Swiper的方法示例
2018/09/20 Javascript
javascript实现的时间格式加8小时功能示例
2019/06/13 Javascript
js中比较两个对象是否相同的方法示例
2019/09/02 Javascript
js实现日历
2020/11/07 Javascript
JavaScript WeakMap使用详解
2021/02/05 Javascript
详解Python中用于计算指数的exp()方法
2015/05/14 Python
Python中with及contextlib的用法详解
2017/06/08 Python
python正则表达式面试题解答
2020/04/28 Python
浅析PHP与Python进行数据交互
2018/05/15 Python
Python函数定义及传参方式详解(4种)
2019/03/18 Python
python实现简单成绩录入系统
2019/09/19 Python
Python变量、数据类型、数据类型转换相关函数用法实例详解
2020/01/09 Python
python3连接MySQL8.0的两种方式
2020/02/17 Python
数据库测试通常都包括哪些方面
2015/11/30 面试题
企业管理专业个人求职信范文
2013/09/24 职场文书
小学数学课后反思
2014/04/23 职场文书
生物科学专业毕业生求职信
2014/06/02 职场文书
委托函范文
2015/01/29 职场文书
搞笑结婚保证书
2015/05/08 职场文书
遗失证明范文
2015/06/19 职场文书
详解Java实现设计模式之责任链模式
2021/06/23 Java/Android
如何通过一篇文章了解Python中的生成器
2022/04/02 Python