函数中的静态内存 [PHP]
static memory in functions [PHP]
我有静态变量的研究函数,让我们看下一个代码:
(警告!要进行测试,您必须在 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 Baker
function a()
{
$var = 10;
xdebug_debug_zval('var');
return $var;
}
a();
输出:var:(refcount=1, is_ref=0),int 10
信息:调用函数不使用可变参数输出信息没有问题。因此,鉴于 arguments used by name of the variable written into a string
访问 PHP 中的静态变量会在使用时创建对内部静态数组的引用。
您可以通过注意不可能在静态变量中存储引用来验证这一点:
function a() {
static $var = 1;
var_dump($var);
$var = &$ref;
$var = 2;
}
a(); a();
// prints int(1) int(1)
我有静态变量的研究函数,让我们看下一个代码:
(警告!要进行测试,您必须在 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 Baker
function a()
{
$var = 10;
xdebug_debug_zval('var');
return $var;
}
a();
输出:var:(refcount=1, is_ref=0),int 10
信息:调用函数不使用可变参数输出信息没有问题。因此,鉴于 arguments used by name of the variable written into a string
访问 PHP 中的静态变量会在使用时创建对内部静态数组的引用。
您可以通过注意不可能在静态变量中存储引用来验证这一点:
function a() {
static $var = 1;
var_dump($var);
$var = &$ref;
$var = 2;
}
a(); a();
// prints int(1) int(1)