`

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中引用符&的用法进行了详细的分析介绍。需要的朋友可以过来参考下

    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中引用类型和值类型功能与用法。分享给大家供大家参考,具体如下: PHP中的四种简单类型和复杂类型array都是值类型。同类型间赋值传递的是值,即创建一个副本给新变量。 例如: $int1 = 123; $int...

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

    在访问PHP类中的成员变量或方法时,如果被引用的变量或者方法被声明成const(定义常量)或者static(声明静态),那么就必须使用操作符::,反之如果被引用的变量或者方法没有被声明成const或者static,那么就必须使用...

    PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】

    本文实例讲述了PHP 范围解析操作符(::)用法。分享给大家供大家参考,具体如下: 范围解析操作符 (::) 范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员,类常量...

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

    9-27 7 常用数组的属性及使用方法 9-28 1课程回顾 9-28 2 二维数组的定义使用 数组排序 9-28 3 顺序查找 二分查找 9-28 4 javascript面向对象编程 9-28 5 javascript对象存在形式 9-28 6 javascript类与对象 9-28 7 ...

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

    9-27 7 常用数组的属性及使用方法 9-28 1课程回顾 9-28 2 二维数组的定义使用 数组排序 9-28 3 顺序查找 二分查找 9-28 4 javascript面向对象编程 9-28 5 javascript对象存在形式 9-28 6 javascript类与对象 9-28 7 ...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    以下是可以使用的方法: &lt;?php . . . ?&gt; &lt;script language="php"&gt; . . . &lt;/script&gt; 语句 与Perl和C一样,在PHP中用(;)来分隔语句。那些从HTML中分离出来的标志也表示语句的结束。 注释 PHP支持C,C++和Unix...

    (全)传智播客PHP就业班视频完整课程

    9-27 7 常用数组的属性及使用方法 9-28 1课程回顾 9-28 2 二维数组的定义使用 数组排序 9-28 3 顺序查找 二分查找 9-28 4 javascript面向对象编程 9-28 5 javascript对象存在形式 9-28 6 javascript类与对象 9-28 7 ...

    PHP和MySQL Web开发第4版pdf以及源码

    6.7.1 通过继承使用private和protected访问修饰符控制可见性 6.7.2 重载 6.7.3 使用final关键字禁止继承和重载 6.7.4 理解多重继承 6.7.5 实现接口 6.8 类的设计 6.9 编写类代码 6.10 理解PHP面向对象新的...

    JavaScript正则表达式之后向引用实例代码

    回溯与固化分组正则表达式之回溯AS3 js正则表达式 反向引用(backreference)详解JavaScript正则表达式之分组匹配及反向引用php正则表达式的模式修正符和逆向引用使用介绍PHP正则表达式的逆向引用与子模式

    PHP基础讲义pdf版含视频下载地址。

    11. 字符串定界符的用法 68 12. 字符串系统函数讲解 70 13. 字符串面试题讲解 79 四、 数组 81 1. 数组概念 81 2. 数组创建方式详细探讨 83 3. 数组单元的增加修改与删除 85 4. 数组的for循环与foreach循环 87 5. ...

    PHP和MySQL WEB开发(第4版)

    6.7.1 通过继承使用private和protected访问修饰符控制可见性 6.7.2 重载 6.7.3 使用final关键字禁止继承和重载 6.7.4 理解多重继承 6.7.5 实现接口 6.8 类的设计 6.9 编写类代码 6.10 理解PHP面向对象新的高级功能 ...

    史上最全传智播客PHP就业班视频课,8月份视频

    9-27 7 常用数组的属性及使用方法 9-28 1课程回顾 9-28 2 二维数组的定义使用 数组排序 9-28 3 顺序查找 二分查找 9-28 4 javascript面向对象编程 9-28 5 javascript对象存在形式 9-28 6 javascript类与对象 9-28 7 ...

    php网络开发完全手册

    16.3.1 定界符重定义 263 16.3.2 存储过程的创建与调用 264 16.3.3 存储过程的参数 265 16.3.4 复合语句 267 16.3.5 变量 268 16.3.6 条件语句 269 16.3.7 循环语句 271 16.3.8 游标 273 16.3.9 存储过程的删除 275 ...

    PHP3程序设计

    尤其值得注意的是,书中使用了多个“中场”章节,以便在学习过一定知识之后,通过实际例子来对所学的知识进行巩固,这些章节介绍的内容具有很强的实用价值。因此本书不仅对Web编程的入门者,即使对于有一定经验的Web...

    韩顺平PHP JS JQUERY 所有视频下载种子 货真价实

    9-27 7 常用数组的属性及使用方法 9-28 1课程回顾 9-28 2 二维数组的定义使用 数组排序 9-28 3 顺序查找 二分查找 9-28 4 javascript面向对象编程 9-28 5 javascript对象存在形式 9-28 6 javascript类与对象 9-28 7 ...

    PHP和MySQL Web开发第4版

    6.7.1 通过继承使用private和protected访问修饰符控制可见性 6.7.2 重载 6.7.3 使用final关键字禁止继承和重载 6.7.4 理解多重继承 6.7.5 实现接口 6.8 类的设计 6.9 编写类代码 6.10 理解PHP面向对象新的...

Global site tag (gtag.js) - Google Analytics