`

php引用&符号详解

    博客分类:
  • PHP
阅读更多

php的引用(就是在变量或者函数、对象等前面加上&符号)

PHP中引用的意思是:不同的名字访问同一个变量内容.

 

变量的引用

PHP的引用允许你用两个变量来指向同一个内容

例一:

<?php

$a="2010";

$b =&$a;

echo $a;//这里输出:2010

echo $b;//这里输出:2010

$b="2012";

echo $a;//这里$a的值变为2012所以输出

echo $b;//这里输出2012

?>

例二:

<?php

$a = "date";

$b = &$a;

echo $a; // date

echo $b; // date

$b = "date1";

echo $a; // date1

echo $b; // date1

unset($a);

echo $b; // date1

?>

从上面的两个例子中,可以看出,把$b的内存地址给了$b,并不是简单的赋值。所以对$b

的任何操作也会影响到$a

另种说法,就是给$a增加了一个别名$b,如果删除了$a,只是删除了这个变量的名字,并没有删除变量的内容,用别名还是可以把这个变量的内容显示出来。(如图关系)

       

函数的传址调用

例三:

<?php

function test(&$a)

{

$a=$a+100;

}

$b=1;

echo $b;//输出1

//这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值 就可以改变$b的值了

test($b);   

echo $b;//输出101

?>

如何在这里test();的话就会出错

   

说明参数只能是变量,常量不具有传址。

 

函数的引用返回

函数的引用返回多用在对象中,这里方便理解用静态变量做个例子

例四:

<?php

function &test()

{

    static $b=0;//申明一个静态变量

    $b=$b+1;

    echo $b;

    return $b;

}

//这条语句会输出 $b的值 为1

$a=test();

$a=5;

$a=test();//这条语句会输出 $b的值 为2

 

$a=&test();//这条语句会输出 $b的值 为3

$a=5;

$a=test();//这条语句会输出 $b的值 为6

注释,这个函数是有输出的,而且也有返回值的。

$a = test();只是将函数test的返回值$b赋给$a了,就是很普通的赋值而已,不是函数的引用返回。所以$a不管做什么操作,都不会影响$b

$a = &test();作用就是$b的内存地址与$a的内存地址指向了同一个地方,会产生类似于$b = &$a的效果,如果$a的值改变了,即变成了5,也会影响$b的值。所以在执行$a = &test()$a = 5,就有$b = 5,经过函数处理输出$b = 6

?>

 

对象的引用

例五:

<?php

class a{

var $abc="ABC";

}

$b=new a;

$c=$b;

echo $b->abc;//这里输出ABC

echo $c->abc;//这里输出ABC

$b->abc="DEF";

echo $c->abc;//这里输出DEF

?>

以上代码是在PHP5中的运行的效果,在PHP5对象的复制是通过引用来实现的。

上列中$b=new a; $c=$b;其实等效于$b=new a; $c=&$b;

PHP5中默认就是通过引用来调用对象,但有时你可能想建立一个对象的副本,并希望原来的对象的改变不影响到副本。为了这样的目的,PHP定义了一个特殊的方法,称为__clone

 

引用的作用

如果程序比较大,引用同一个对象的变量比较多,并且希望用完该对象后手工清除它,建议用"&"方式,然后用$var=null的方式清除。其它时候还是用php5的默认方式吧.

另外, php5中对于大数组的传递,建议用"&"方式,毕竟节省内存空间使用。

 

取消引用

当你unset一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了。

例如:

 <?php

$a = 1;

$b =& $a;

unset ($a);

?>  

不会unset $b,只是$a

可以参看变量的引用那段

 

 global 引用

当用global $var声明一个变量时实际上建立了一个到全局变量的引用。

它等价于下面这段代码:

<?php

$var =& $GLOBALS["var"];

?> 

 这意味着,例如,unset $var不会unset全局变量。

 

$this

在一个对象的方法中,$this永远是调用它的对象的引用。

 

另外说明

php中对于地址的指向(类似指针)功能不是由用户自己来实现的,是由Zend核心实现的,php中引用采用的是写时拷贝的原理,就是除非发生写操作,才会拷贝,其他操作,指向同一个地址的变量或者对象是不会被拷贝的。

假如,有以下代码:

$a="ABC";
$b=$a;

Ps:我个人认为这里应该是$b = &$a,才能使$a$b指向同一内存地址,但是我参考的资料上面就是这么写的,目前我对&了解的还不是很深入,如果有朋友有不同见解的可以提出来,谢谢喽

此时,$a$b都是指向同一内存地址,而并不是$a$b占用不同的内存

 

如果在上面的代码基础上再加上,如下代码

$a="EFG";

这里进行“写”操作了

由于$a$b所指向的内存的数据要重新写一次了,此时Zend核心会自动判断,自动为$b生产一个$a的数据拷贝,重新申请一块内存进行存储。

 

 

分享到:
评论

相关推荐

    php中引用符号(&)的使用详细介绍

    php的引用就是在变量或者函数、对象等前面加上&符号,在PHP 中引用的意思是:不同的名字访问同一个变量内容,下面介绍如何使用PHP的引用,需要的朋友可以参考下

    php中引用符号(&amp;)的使用详解

    PHP中的引用符号`&`用于创建这种关系。与C语言中的指针不同,PHP的引用并不直接存储内存地址,而是由PHP引擎在内部管理。 ### 引用的创建与使用 创建引用的方法是在变量声明时在其前加上`&`符号。以下是一个简单的...

    php中引用符号()的使用详解

    与C语言中的指针是有差别的.C语言中的指针里面存储的是变量的内容在内存中存放的地址变量的引用.PHP 的引用允许你用两个变量来指向同一个内容 复制代码 代码如下:$a=”ABC”; $b =&$a; echo $a;//这里输出:ABC ...

    php 引用(&amp;)详解

    php的引用(就是在变量或者函数、对象等前面加上&符号)

    PHP引用(&)各种使用方法实例详解

    php的引用(就是在变量或者函数、对象等前面加上&符号),在PHP 中引用的意思是:不同的名字访问同一个变量内容。与C语言中的指针是有差别的.C语言中的指针里面存储的是变量的内容,在内存中存放的地址。 1.变量的...

    PHP的引用详解

    这并不像 C 的指针,替代的是,引用是符号表别名。注意在 PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字。最接近的比喻是 Unix 的文件名和文件本身——变量名是目录条目,而变量内容则是文件...

    php引用传值实例详解学习

    这并不像 C 的指针,替代的是,引用是符号表别名。注意在 PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字。最接近的比喻是 Unix 的文件名和文件本身——变量名是目录条目,而变量内容则是文件...

    php引用返回与取消引用的详解

    在PHP中,使用`&`符号来表示返回引用。 以下是一个例子: ```php class foo { public $value = 42; public function &getValue() { return $this-&gt;value; } } $obj = new foo(); $myValue = &$obj-&gt;getValue...

    TIPI:深入理解PHP内核-PHP内核程序详解chm文档

    此外,还有对内存分配、循环引用处理等方面的优化。 通过深入学习《TIPI:深入理解PHP内核》,开发者不仅能了解PHP的工作原理,还能掌握优化代码、调试问题和开发扩展的技巧,从而提升编写高效、可靠的PHP应用程序...

    Php引用计时器和垃圾回收机制.docx

    《PHP引用计数器与垃圾回收机制详解》 PHP作为一种动态类型的编程语言,其变量管理机制包括引用计数器和垃圾回收机制,这两者是PHP内存管理的核心。本文将深入探讨这两个概念,以及它们在PHP中的实现方式。 首先,...

    PHP函数引用返回的实例详解

    在PHP编程语言中,函数引用返回是一种特殊的功能,它允许函数返回一个变量的引用而不是其值的副本。这种机制在处理大量数据或者需要在函数之间共享同一块内存空间时非常有用。本文将详细讲解PHP函数引用返回的概念、...

    PHP函数的应用详解.pdf

    若需让函数修改参数值,需通过引用传递(使用`&`符号)。 总的来说,PHP函数是构建和管理代码的重要工具,通过合理地使用函数,可以提升代码的清晰度、效率和可维护性。理解并熟练运用函数的定义、调用、参数以及...

    详解PHP变量传值赋值和引用赋值变量销毁

    而 **引用赋值** 是通过在变量前添加 `&` 符号实现的。使用 `$a = &$b;` 时,`$a` 不再存储 `$b` 的值,而是存储了 `$b` 的内存地址,这样两个变量共享同一块内存空间。这意味着修改其中一个变量会直接影响另一个。...

    PHP数组详解.pdf

    2. 关联数组:数组元素的下标是字符串,可以作为键来引用对应的值。 二、数组的定义 在PHP中,定义数组非常灵活,无需预先指定大小,也不必在使用前声明。数组可以存储不同类型的值,并支持一维和多维数组。定义...

    PHP 转义使用详解

    设置为on时,为我们引用的数据碰到 单引号’ 和 双引号” 以及 反斜线\ 时自动加上反斜线,帮我们自动转译符号,确保数据操作的正确运行两者的区别: magic_quotes_gpc作用范围是:WEB客户服务端;作用时间:请求...

    Source Insight PHP语言包

    安装完成后,你可以打开PHP文件,体验Source Insight提供的强大功能,如代码折叠、查找引用、跳转到定义、查看符号信息等。这对于PHP开发者来说,是一个非常有价值的工具,可以帮助他们更高效地管理和理解复杂的PHP...

    php程序员笔试题2(带答案),

    使用`&`符号可以将变量作为引用传递,例如`Myfunction(&$myVariable)`。在需要函数修改原变量或避免复制大对象时,通常会使用引用。 5. 加载函数库的方法: 在PHP中,加载函数库通常使用`include()`, `include_...

    php-5.6.15

    - **变量解析的弱引用**:`$`符号前的`&`现在可以省略,使得变量引用更加简洁。 - **空格符的处理**:在比较运算符前后添加空格不会改变其行为,这对代码一致性有积极影响。 - **更强大的数组语法**:如`[]`用于...

    史上最全韩顺平传智播客PHP就业班视频,10月份全集

    符号实体 url说明 超链接 发送电邮 8-11 4.图像 表格 实际应用-菜谱 课堂练习-课程表 8-11 5.无序列表 有序列表 框架 8-12 1.浮动窗口 表单及表单控件① 8-12 2.表单及表单控件② 8-12 3.多媒体页面 标签汇总① 地图...

Global site tag (gtag.js) - Google Analytics