文档章节

php引用(&)

eatnothing
 eatnothing
发布于 2016/04/17 17:27
字数 476
阅读 39
收藏 1
php引用

php引用允许两个变量指向同一个内容

<?php
$a = &$b;
//$a和$b指向了同一个变量
?>

如果对一个未定义的变量进行引用赋值,引用穿参,则会自动创建该变量

function foo(&$var){}
foo($a);
var_dump($a);
//输出null 
$b = array();
foo($b['b']);
var_dump(array_key_exists('b',$b));
//bool true
$c = new stdClass();
foo($c->d);
var_dump(property_exists($c,'d'));
//bool true

如果在一个函数内部给一个声明为global变量赋予一个引用,该引用只在函数内部可见,可以通过使用$GLOBALS数组避免

$var1 = "example variable";
$var2 = "";

function global_references($use_globals){

    global $var1,$var2;
    if(!$use_globals){
        $var2  =& $var1;
    }else{
        $GLOBALS["var2"] =& $var1;
    }
}
global_references(false);
echo "var2 is set to $var2"."</br>";
//"var2 is set to "
global_references(true);
echo "var2 is set to $var2"."</br>";
//"var2 is set to example variable"

取消引用 当unset一个引用,只是断开了变量名和变量内容之间的绑定,并不代表变量的内容被销毁了

<?php
$a = 1;
$b =& $a;
unset($a);
?>

函数的引用传递

function test(&$a){
$a = $a +100;
}
$b = 1;
echo $b;	//输出1
test($b);
//这里$b传递给函数的其实是$b变量内容所处的内存地址,通过函数里改变$a的值就可以改变$b的值了
echo $b;

函数的引用返回

<?php
function &test()
{
    static $b=0;//申明一个静态变量
    $b=$b+1;
    echo $b;
    return $b;
}
$a=test();//这条语句会输出 $b的值 为1
$a=5;
$a=test();//这条语句会输出 $b的值 为2
$a=&test();//这条语句会输出 $b的值 为3
//此处a得到的是B的地址
//将A置换为5之后相应的b也会变为A的值
$a=5;
$a=test();//这条语句会输出 $b的值 为6
?>

引用结构出现在面向对象中

class fucker{

    private $data = 'hi';
    public function &get(){
        return $this->data;
    }
    public function out(){
        echo $this->data;
    }
}
$q = new fucker();
$d = & $q->get();
$q->out();
$d = 'fuck';
$q->out();
$d = 'u';
$q->out();
$d = 'sir';
$q->out();
//hifuckusir

© 著作权归作者所有

上一篇: mysql优化(1)
下一篇: php curl使用
eatnothing
粉丝 39
博文 128
码字总数 68736
作品 0
昌平
程序员
私信 提问
php中引用&的真正理解

原文地址:http://www.cnblogs.com/thinksasa/p/3334492.html php的引用(就是在变量或者函数、对象等前面加上&符号) //最重要就是 删除引用的变量 ,只是引用的变量访问不了,但是内容并没...

chenzy526
2017/05/26
0
0
php的引用(就是在变量或者函数、对象等前面加上&符号)

php的引用(就是在变量或者函数、对象等前面加上&符号) 在PHP 中引用的意思是:不同的名字访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的指针里面存储的是变量的内容在内存中...

晨曦之光
2012/03/09
1K
0
PHP中global与$GLOBALS['']的区别

根据官方的解释是 $GLOBALS['var'] 是外部的全局变量$var本身。 global $var 是外部$var的同名引用或者指针。(错误:是个别名引用而已,非指针!!!) 举例说明一下: php纯技术探讨交流群...

速贷100
2017/03/08
0
0
php引用(&)详解及注意事项#非常好的一篇文章 标记一下#

(接上一篇... ) php引用(&)详解及注意事项 官方文档: 1.引用是什么:http://www.php.net/manual/zh/language.references.whatare.php 2.引用做什么:http://www.php.net/manual/zh/language...

PPP
2012/03/25
134
0
PHP的内存泄露问题与垃圾回收

你写了一个php脚本,一般都不用考虑内存泄露和垃圾回收的问题,因为一般情况下你的脚本很快就执行完退出了。 但在一些运行时间长,数据量大的时候,程序运行一段时间后,php脚本就占用了过多...

Jean
2014/05/19
763
0

没有更多内容

加载失败,请刷新页面

加载更多

如何有效地计算JavaScript中对象的键/属性数量?

计算对象的键/属性数的最快方法是什么? 是否可以在不迭代对象的情况下执行此操作? 即不做 var count = 0;for (k in myobj) if (myobj.hasOwnProperty(k)) count++; (Firefox确实提供了一...

技术盛宴
32分钟前
3
0
百度网址安全中心拦截解除的办法分享

临近2019年底,客户的公司网站被百度网址安全中心拦截了,公司网站彻底打不开了,影响范围很大,于是通过朋友介绍找到我们SINE安全公司寻求帮忙解封,关于如何解除百度的安全拦截提示,下面就...

网站安全
44分钟前
6
0
Tomcat8源码分析-启动流程-start方法

上一篇:Tomcat8源码分析-启动流程-load方法 前面讲了启动流程中的Catalina.load,进一步调用绝大部分组建的init操作,主要完成对server.xml解析,并根据解析的结果结合设置的Rule(规则)构造...

特拉仔
52分钟前
6
0
Xamarin.FormsShell基础教程(7)Shell项目关于页面的介绍

Xamarin.FormsShell基础教程(7)Shell项目关于页面的介绍 轻拍标签栏中的About标签,进入关于页面,如图1.8和图1.9所示。它是对应用程序介绍的页面。 该页面源自Views文件夹中的AboutPage.x...

大学霸
58分钟前
3
0
一步一步理解Impala query profile(一)

很多Impala用户不知道如何阅读Impala query profile来了解一个查询背后正在执行的操作,从而在此基础上对查询进行调优以充分发挥查询的性能。因此我想写一篇简单的文章来分享我的经验,并希望...

九州暮云
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部