PHP引用符&的用法详细解析

时间:2023-10-17 17:25:53 

关于php的引用(就是在变量或者函数、对象等前面加上&符号)的作用,我们先看下面这个程序。


<?php 
 $a = 100; //声明变量a 
 $b = &$a; //声明变量b,引用自变量a 
 echo "$a <br />";   
 echo "$b <br />"; 
 $a++; //变量a自增1 
 echo "$a <br />"; 
 echo "$b <br />";//查看变量b,也增加了1,说明使用的是同一存储单元 
 ?>


程序运行结果:


100  
100  
101  
101


很多人误解php中的引用跟C当中的指针一样,事实上并非如此,而且很大差别。C语言中的指针除了在数组传递过程中不用显式申明外,其他都需要使用*进行定义,而php中对于地址的指向(类似指针)功能不是由用户自己来实现的,是由Zend核心实现的,php中引用采用的是“写时拷贝”的原理,就是除非发生写操作,指向同一个地址的变量或者对象是不会被拷贝的。

php默认为传值传递:


<?php     
 $a = 20; 
 $b = $a; 
 $a = $a + 10;  
 echo $a.' and '.$b;  
 ?>


程序运行结果:


30 and 20


要是想变为地址传递需要加&,既:


<?php 
 $a = 20; 
 $b = &$a;  
 $a = $a + 10;  
 echo $a.' and '.$b;  
 ?>


程序运行结果:


30 and 30


也就是说,&把$a的地址传给了$b,这样的话这两个变量现在共享一个内存的存储区域,就是说它们的值是一样的。

同样的语法可以用在函数中,它返回引用,以及用在 new 运算符中:


 <?php 
 $bar =& new fooclass(); 
 $foo =& find_var($bar); 
 ?>


引用做的第二件事是用引用传递变量。这是通过在函数内建立一个本地变量,并且该变量在呼叫范围内引用了同一个内容来实现的。说的通俗点就是一个函数的参数是一个本地变量的引用。下面再举例说明一下:


 <?php 
 function foo(&$val1, $val2) { 
     $val1 += 1; 
     $val2 += 1; 
 } 
 $a=5; 
 $b=10; 
 foo($a,$b); 
 echo $a; 
 echo $b; 
 ?>


运行这段代码是给函数传递两个参数,一个是引用$a的内容,一个是$b的值,在执行此函数后,发现$a的内容改变了,而$b的内容则没有变化。

PHP引用的第三个用法是引用返回,这个用法理解起来有点难度,引用返回用在当你想用函数找到引用应该被绑定在哪一个变量上面时。当返回引用时,使用此语法:说的简单点,就还是引用函数的返回。但和参数传递不同,必须在函数定义和函数引用这两个地方都用 & 符号。下面举个例子:


 <?php 
 function &find_var ($param) 
 { 
     /* ...code... */
     return $found_var; 
 } 
 $foo =& find_var ($bar); 
 $foo->x = 2; 
 ?>


这个例子给$foo 赋值是函数find_var的返回引用,所以在给$foo->x赋值时就是给find_var的返回引用赋值,而不是简单的赋值。

PHP引用的最后一个用法是引用定位,主要有两个应用:一个是global 引用,当用 global $var 声明一个变量时实际上建立了一个到全局变量的引用。也就是和$var =& $GLOBALS["var"];是一样的。另外一个是$this的用法,在一个对象的方法中,$this 永远是调用它的对象的引用。

标签:PHP,引用符
0
投稿

猜你喜欢

  • Python 中10进制数与16进制数相互转换问题

    2021-11-29 15:37:26
  • Python爬虫之爬取二手房信息

    2021-08-11 19:40:50
  • Python 去除字符串中指定字符串

    2023-04-20 23:44:53
  • 详解python读取matlab数据(.mat文件)

    2021-03-04 19:29:29
  • Oracle 数据库导出(exp)导入(imp)说明

    2009-03-06 10:49:00
  • python实现井字棋游戏

    2022-02-27 15:16:49
  • 段正淳的css笔记(1)分类之间的横竖线

    2007-11-01 21:47:00
  • PHP html_entity_decode()函数讲解

    2023-06-01 00:59:43
  • list视图方式设计浅析

    2008-12-21 16:04:00
  • SQL Server管理 这些你懂吗?

    2011-07-01 13:40:23
  • python实现精准搜索并提取网页核心内容

    2021-04-07 09:14:04
  • MySQL在命名用过程中所遇到的常见问题

    2008-12-05 16:03:00
  • 如何用Axure制作Tab页签

    2009-02-08 17:53:00
  • 轻松处理Dreamweaver段落缩进

    2007-11-17 07:53:00
  • Python-openCV读RGB通道图实例

    2023-01-26 12:28:26
  • php注册系统和使用Xajax即时验证用户名是否被占用

    2023-09-12 05:27:55
  • python pandas.DataFrame.loc函数使用详解

    2023-10-04 07:01:58
  • 利用Python实现读取Word表格计算汇总并写入Excel

    2021-06-24 06:15:47
  • 用户体验之内容篇

    2010-11-05 18:21:00
  • Python获取邮件地址的方法

    2022-05-29 10:53:05
  • asp之家 网络编程 m.aspxhome.com