PHP 中的静态变量与地址引用问题

光头哥 发布于 2013/03/08 17:47
阅读 695
收藏 3
PHP
$a = array('a', 'b', 'c');
function &test()
{
    global $a;
    static $b;
    var_dump($b);
    $b = &$a;

    return $b;
}
$c = & test();
$c[0] = 'z';
test();
为什么第二次输出$b是空的
加载中
0
南湖船老大
南湖船老大

$b= &$a;

改成

$b= $a;

即可。

YIPU
YIPU
是不是引用不=赋值,这里$b=&$a,只是指向同一个地址,而$b的值还是空的,是不是啊
南湖船老大
南湖船老大
回复 @自由的老K : 你先看手册上说的吧
光头哥
光头哥
但是为什么要改了之后才有用呢? 是因为静态变量与地址引用冲突吗?
0
YIPU
YIPU
$c=test()方式调用函数,只是将函数的值赋给$c而已, 而$c做任何改变 都不会影响到函数中的$b
而通过$c=&test()方式调用函数呢, 他的作用是 将return $b中的 $b变量的内存地址与$c变量的内存地址 指向了同一个地方

即产生了相当于这样的效果($c=&$b;) 所以改变$c的值 也同时改变了$b的值 

http://www.oscphp.com/archive/15.html


0
光头哥
光头哥

引用来自“Roger蛋蛋”的答案

$b= &$a;

改成

$b= $a;

即可。

@Roger蛋蛋 手册上面说是如果申明了静态变量,则就算第二次访问也不会记录状态。但是我之前在CI的源代码中看到一段代码,大致 内容如下。
function &get_config(){
   static $_CONFIG;
/*
* 中间略~~~
*/
   return   $_CONFIG[0] = &$config;//$config是一个一维数组
}
我后来也自己试了一下,用数组下标的方式就算是静态变量也能够引用到,这又是什么情况呢
0
南湖船老大
南湖船老大
对这类语法不想深究,现在PHP5没有非用&不可的必要性.
返回顶部
顶部