字体:  

又要麻烦大家了,还是关于变量问题的!!!

cers 发表于: 2008-8-08 14:47 来源: PHPChina 开源社区门户


手册上说这里会输出1 2 3,测试结果也是输出1 2 3,我不太明白,在函数里已经用unset销掉了变量a
为什么第二次调用函数里,新建的变量a还是指向原来 的地址?

这里加上原帖地址:http://bbs.phpchina.com/thread-73956-1-1.html

最新回复

于安 at 2008-8-08 15:13:12
<?php
function foo()
{
    static $a;
    $a++;
    echo "$a\n";
    unset($a);  //你即释放了$a,但不影响静态.
    echo "$a\n";
}
foo();  //执行一个,,  $a=1 注意,不是返回!!!
foo();  
foo();
?>
pylong at 2008-8-08 15:30:53
如果在函数中 unset() 一个静态变量,则 unset() 将销毁此变量及其所有的引用。
————转自PHP手册(unset函数,里面有关于全局变量等unset的说明)
shidadmt at 2008-8-08 15:39:52
既然销毁了引用,那为什么$a++后又能找到原来的$a变量的值1再加1呢?
9945 at 2008-8-08 15:48:31
static $a belong for function foo();
shidadmt at 2008-8-08 15:53:52

QUOTE:

原帖由 9945 于 2008-8-8 15:48 发表
static $a belong for function foo();
可以解释清楚一些吗?为什么?why?

[ 本帖最后由 shidadmt 于 2008-8-8 15:55 编辑 ]
cers at 2008-8-09 16:06:42
也就是说在函数里unset了静态变量没有意义对吗?
hedgelog at 2008-8-09 16:11:53
进来学习下
CrossMaya at 2008-8-09 16:19:43
静态变量应该在内存中的代码区!

它是唯一的!只有一个值!

unset删除了引用!代码区a的值还存在!
xinglu1983 at 2008-8-09 19:37:14
一:

CODE:

<?php
function foo()
{
global $a;
$a++;
}
foo();
echo $a;
?>
二:

CODE:


<?PHP
function foo()
{
global $a;
    $a++;
    echo "$a<br />";
    unset($a);
echo "$a<br />";
global $a;
echo "$a<br />";
}
foo();
foo();
foo();
?>
三:

CODE:


<?PHP
function foo()
{
echo "$a";
echo '<br />';
    static $a;
    $a++;
    echo "$a";
echo '<br />';
    unset($a);
static $a;
echo "$a";
echo '<br />';
}
foo();
foo();
foo();
?>
结合php函数变量作用域,global和static的区别,应该能明白为什么。