PHP引用符&的用法介绍
admin
2023-06-21 08:22:14
0次

$a="hello";

$b=&$a;

unset($a);

echo $a; //没有值

echo $b; //结果是hello

?>

这里的unset是一个销毁变量的函数,而不是给$a赋空值unset($a) 跟 $a = ""是两个完全不同的概念,销毁$a 跟$b没什么关系。
你把 unset($a)换成 $a = "" 你再看看结果就知道了。用var_dump()查看输出结果会更明显一些。

       在PHP 中引用的意思是:不同的名字访问同一个变量内容.与C语言中的指针是有差别的.C语言中的指针里面存储的是变量的内容在内存中存放的地址。PHP 的引用允许你用两个变量来指向同一个内容。PHP中有时你可能想建立一个对象的副本,并希望原来的对象的改变不影响到副本 。当你 unset 一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了也就是你unset的是其中1个变量。 另个还存在不变化

//php引用的使用$a = 123;$b = &$a;   //现在$a又有了一个别名叫$b$b = 234;   //操作$b就相当于操作$a,现在$a = 234$b = null;  //此操作能清空$a和$bunset($b);  //此操作才能取消$b和$a的绑定,取消了变量$b


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

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

程序运行结果:

1100
2100
3101
4101

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

php默认为传值传递:

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

程序运行结果:

130 and 20

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

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

程序运行结果:

130 and 30

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

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

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

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

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

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

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

1
2function &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 永远是调用它的对象的引用。



相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...