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

2015-01-24信息快讯网

以下是对PHP中引用符&的用法进行了详细的分析介绍。需要的朋友可以过来参考下

关于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短网址的生成代码(仿微博短网址)
php实现信用卡校验位算法THE LUHN MOD-10示例
php对称加密算法示例
php实现mysql封装类示例
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
php setcookie函数的参数说明及其用法
php中的curl使用入门教程和常见用法实例
php中stream(流)的用法
easyui的tabs update正确用法分享
php中的静态变量的基本用法
PHP引用(&)各种使用方法实例详解
PHP中isset()和unset()函数的用法小结
PHP中redis的用法深入解析
PHP中ini_set和ini_get函数的用法小结
php的sprintf函数的用法 控制浮点数格式
浅谈PHP变量作用域以及地址引用问题
PHP变量的定义、可变变量、变量引用、销毁方法
php中引用符号(&)的使用详解
php foreach循环中使用引用的问题
PHP如何利用P3P实现跨域
新手菜鸟必读:session与cookie的区别
PHP mysql与mysqli事务使用说明 分享
php中url传递中文字符,特殊危险字符的解决方法
测试PHP连接MYSQL成功与否的代码
PHP 通过Socket收发十六进制数据的实现代码
php读取mysql中文数据出现乱码的解决方法
浅析PHP原理之变量分离/引用(Variables Separation)
php接口与接口引用的深入解析
php addslashes 利用递归实现使用反斜线引用字符串
解析php session_set_save_handler 函数的用法(mysql)
PHP垃圾回收机制引用计数器概念分析
解析Ubuntu下crontab命令的用法
解析PHP中ob_start()函数的用法
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
PHP中的函数-- foreach()的用法详解
解析smarty 截取字符串函数 truncate的用法介绍
深入解析PHP的引用计数机制
©2014-2024 dbsqp.com