`

PHP引用符&的用法介绍

 
阅读更多

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

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

程序运行结果:

1 100
2 100
3 101
4 101

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

php默认为传值传递:

1 <?php   
2 $a = 20;
3 $b $a;
4 $a $a + 10;
5 echo $a.' and '.$b;
6 ?>

程序运行结果:

1 30 and 20

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

1 <?php
2 $a = 20;
3 $b = &$a;
4 $a $a + 10;
5 echo $a.' and '.$b;
6 ?>

程序运行结果:

1 30 and 30

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

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

1 <?php
2 $bar =& new fooclass();
3 $foo =& find_var($bar);
4 ?>

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

01 <?php
02 function foo(&$val1$val2) {
03     $val1 += 1;
04     $val2 += 1;
05 }
06 $a=5;
07 $b=10;
08 foo($a,$b);
09 echo $a;
10 echo $b;
11 ?>

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

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

1 <?php
2 function &find_var ($param)
3 {
4     /* ...code... */
5     return $found_var;
6 }
7 $foo =& find_var ($bar);
8 $foo->x = 2;
9 ?>

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

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

分享到:
评论

相关推荐

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

    本文将深入解析PHP引用符`&`的四种主要用法。 1. **变量间的引用赋值** 当我们使用`&`在变量前声明时,如`$b = &$a;`,`$b`就成为了`$a`的一个引用,而不是其副本。这意味着修改`$b`会影响到`$a`,因为它们都指向...

    PHP 基础实例教程(PHP网页实例版)

    PHP 操作符综合使用 PHP 条件判断/循环 PHP if语句 PHP else语句 PHP elseif语句 PHP switch语句 PHP while循环 PHP for和foreach循环 PHP do...while循环 PHP break/continue/exit PHP 数组 PHP 数字索引数组 PHP ...

    PHP引用符的用法详细解析

    关于php的引用(就是在变量或者函数、对象等前面加上&符号)的作用,我们先看下面这个程序。复制代码 代码如下:&lt;?php $a = 100; //声明变量a $b = &$a; //声明变量b,引用自变量a echo “$a ”; echo “$b...

    php正则表达式的模式修正符和逆向引用使用介绍

    正则表达式是文本处理中不可或缺的工具,特别是在进行模式匹配和搜索替换操作时。在PHP中,正则表达式的强大功能主要通过 PCRE(Perl Compatible ...掌握这两者的使用方法,对于进行高效准确的文本处理工作至关重要。

    Php引用计时器和垃圾回收机制[参照].pdf

    当使用`&`操作符创建引用时,`is_ref__gc`会被设置为1,表示这个`zval`实际上是一个引用,而不是简单地复制值。在这种情况下,即使引用计数大于1,对变量的修改也会影响所有引用它的变量。 总结来说,PHP的引用...

    PHP错误抑制符(@)导致引用传参失败Bug的分析

    但是在某些情况下,错误抑制符的使用可能会带来意外的效果,比如在引用传递参数的场景中。 在给出的示例中,我们看到一个函数调用的两种不同写法。第一种写法中,数组前加上了错误抑制符(@),而第二种写法则没有...

    phpf2f(php4 to php5)用于将php4代码移植到php5语法中

    2. **对象操作符的变化**:在PHP4中,成员变量访问使用`.`操作符,如`$object-&gt;var`;在PHP5中,改为了`.`操作符,即`$object-&gt;var`。 3. **E_STRICT错误级别**:PHP5引入了新的错误报告级别E_STRICT,用于提示最佳...

    php基本语法——记忆卡

    - 使用定界符`来定义多行字符串。例如: ```php $str = php is website I like php EOD; ``` 定界符`EOD`可以是任何非保留关键字,并且在定义字符串时必须与结束标识符匹配。 通过以上介绍,我们可以看出...

    PHP 5手册.txt

    此章节涉及PHP 5中的表达式的概念及使用方法: 1. **基本表达式**:如算术表达式、比较表达式等。 2. **复合表达式**:结合多个操作符形成的复杂表达式。 #### 六、运算符 介绍了PHP 5支持的各种运算符: 1. **...

    php7.4.3.zip win版本

    例如,`nullsafe`操作符允许在可能为`null`的对象上调用方法或访问属性,避免了`null`值引发的错误。 3. **错误处理**:PHP 7.4使用了更友好的错误报告机制,以异常形式报告错误,这使得调试过程更加顺畅。 4. **...

    php相对路径解决方法

    "php相对路径解决方法"这个主题主要关注如何在PHP中有效地使用相对路径来解决文件定位的问题。以下是对这个话题的详细阐述: 一、理解路径类型 1. 绝对路径:从根目录开始的完整路径,明确指明了文件或目录的位置。...

    解决Windows下PHP的exec、shell_exec等函数不能正常运行的方法

    在Windows系统中,这些函数通常依赖于`cmd.exe`(命令提示符)来运行外部程序。当PHP尝试通过这些函数启动一个进程时,它需要有执行`cmd.exe`的权限。 问题在于,默认情况下,PHP可能没有足够的权限来访问`cmd.exe`...

    PHP通过引用传递参数用法分析

    本文将深入分析PHP中通过引用传递参数的用法,并通过实例来帮助理解其工作原理。 首先,值传递是PHP中默认的参数传递方式。当函数接收一个参数时,它会复制该参数的值到一个新的内存位置,函数内部的操作不会影响到...

    PHPweb2.0网站开发高级开发技术—PHP面向对象编程介绍

    - **克隆**:使用`clone`关键字创建对象的副本,保持原有的引用关系。 - **序列化**:将对象转换为字符串,便于存储或传输。使用`serialize()`方法进行序列化,`unserialize()`进行反序列化。 **9. 异常处理** PHP...

    PHP中文调试技术手册(PHP-Debug-Manual-public)

    本手册将介绍Vim、Zend Studio、Eclipse和NetBeans等IDE的基本使用方法。 3.2 IDE调试: 通过配置和使用IDE内置的调试功能,可以更高效地进行PHP代码的调试。 3.2.1 Zend Studio + Zend Debugger: Zend Studio是...

    PHP面试总结,知识结构大纲

    在流程控制中,文档介绍了分支结构(if, elseif, switch-case)和循环结构(for, foreach, while)的基本使用方法,以及变量的作用域问题。 最后,文档提到函数的参数传递,包括值传递和引用传递的区别,以及函数的...

    PHP中::、-&amp;gt;、self、$this几种操作符的区别介绍

    在PHP编程语言中,了解和正确使用不同的操作符是至关重要的。本文将深入探讨`::`、`-&gt;`、`self`和`$this`这四种操作符的区别,以帮助开发者更好地理解和应用它们。 首先,`::`双冒号操作符被称为作用域解析运算符,...

    官方php源代码 php-7.4.5.tar.gz

    例如,`nullsafe operator`(问号点操作符)允许开发者安全地访问可能为`null`的对象属性或调用方法,避免了因`null`值导致的运行时错误。此外,`WeakRef`类的加入提供了弱引用的支持,使得开发者可以创建不阻止对象...

    Zend PHP 5 Certification Study Guide

    除了这些核心内容,本书还涉及了其他重要的PHP特性,如魔术方法、类型提示、命名空间、以及PHP 5中的新特性,如引用、弱引用、Spl(Standard PHP Library)以及PHP的内置数组函数和字符串函数。 为了帮助读者巩固...

Global site tag (gtag.js) - Google Analytics