`

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中关于引用(&)详解.docx

    ### PHP中关于引用(&)详解 #### 引言 在PHP编程中,引用是一个非常重要的概念,它使得多个变量能够共享同一份数据。不同于其他语言中的指针机制,PHP中的引用更加安全且易于使用。本文将详细介绍PHP中引用的各种...

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

    在PHP编程语言中,使用引用符号(&)可以实现不同变量或函数对同一内存地址的访问,即它们指向同一个变量内容。这种机制与C语言中的指针有所不同,C语言的指针包含变量内容的地址,而PHP中的引用则直接是变量内容的...

    php引用传值实例详解学习

    PHP引用传值是一种将一个变量标识符与另一个变量标识符绑定在一起的方式,使得这两个标识符能够访问同一个变量的值。通过使用引用操作符(&),PHP允许开发者创建指向同一数据的变量别名,而不是创建变量的副本。...

    PHP的引用详解

    这并不相同于C语言中的指针,因为PHP的引用实际上是符号表的别名,变量名和变量内容是分开的,内容可以有不同的名字。这可以用Unix文件系统中的硬链接来作比较,即不同的文件名可以链接到同一个文件。 引用的使用...

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

    在PHP中,引用符号(&)是一个非常有用的工具,它允许我们创建变量、函数或对象的别名。这意味着不同的名称可以访问同一块数据。这样的特性在编程时可以让我们更加灵活地操作数据,同时可以节省内存空间,尤其在处理...

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

    在PHP中,引用是一种特殊的语法结构,它允许两个或更多的变量共享同一个值的存储位置,也就是说,它们都指向内存中的同一个数据。这一点与C语言中的指针不同,指针存储的是变量地址,而PHP的引用则直接关联变量内容...

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

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

    php 引用(&amp;)详解

    ### PHP引用(&)详解 #### 一、PHP引用的基本概念 在PHP中,引用是一种特殊类型的变量,它允许我们使用不同的变量名来访问同一块内存中的数据。引用不同于普通的变量赋值,它实际上是创建了一个别名,使得多个变量...

    PHP常用符号和函数.docx

    - **引用符号**:`&`,用于表示变量的引用。 - **错误抑制**:`@`,用于抑制错误信息的输出。 - **对象成员访问**:`-&gt;`,用于访问对象的属性或方法。 - **数组元素值**:`=&gt;`,用于关联数组时指定键值对。 - **三元...

    PHP正则表达式详解

    ### PHP正则表达式详解 在本篇文章中,我们将深入探讨PHP中的正则表达式的使用方法,特别是关于一些特殊字符的使用方式以及如何构建复杂的模式来匹配特定的文本字符串。 #### 特殊字符:`^` 和 `$` **^** 和 **$*...

    php中符号的含义

    ### PHP中的符号含义详解 #### 一、概述 在PHP编程语言中,各种符号的使用极为广泛,它们不仅是代码逻辑的基础构建块,还能够极大地提高程序的可读性和执行效率。本文将详细介绍PHP中常见的符号及其用法,帮助...

    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应用程序...

    PHPweb2.0网站开发高级开发技术—PHP面向对象语法(构造函数、析构函数、引用)

    ### PHP Web 2.0 网站开发高级开发技术 — PHP 面向对象语法详解 #### 一、概述 本课程为上海交通大学昂立学趣 CTO 学院提供的内部高级课件,旨在帮助学员掌握 PHP 面向对象编程的核心概念和技术要点。课程由经验...

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

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

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

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

    PHP函数的应用详解.pdf

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

Global site tag (gtag.js) - Google Analytics