函数中的静态内存[PHP]

时间:2016-10-18 09:37:54

标签: php static-variables

我有静态变量的研究函数,让我们看下一个代码:

(警告!对于测试,您必须在php.ini中启用xdebug)

function a()
{
    static $var = 10;
    xdebug_debug_zval('var');
    return $var;
}
a();

输出下一个:var:(refcount=2, is_ref=1),int 10

发生了什么事?为什么refcount=2?第二次参考?

P.S所以,如果我们有var:(refcount=2, is_ref=1),int 10。这就是为什么我们不能在静态变量中保存引用。

对于用户Mark Ba​​ker

function a()
{
    $var = 10;
    xdebug_debug_zval('var');
    return $var;
}
a();

输出:var:(refcount=1, is_ref=0),int 10

信息:调用函数不使用输出信息没有问题的变量参数。因此,鉴于变量名称所使用的参数写入字符串

1 个答案:

答案 0 :(得分:1)

在PHP中访问静态变量会在使用时创建对内部静态数组的引用。

您可以通过注意到无法在静态变量中存储引用来验证这一点:

function a() {
    static $var = 1;
    var_dump($var);
    $var = &$ref;
    $var = 2;
}
a(); a();
// prints int(1) int(1)