xdebug_debug_zval("cb");
print_r(debug_zval_dump($cb));
exit;
输出:
cb: (refcount=2, is_ref=1)=1
long(1) refcount(1)
分析: 静态变量 实际使用 是在本地 创建一个 同名的变量 且指向 $cb 的引用
<?php
$g_a = '1';
function func($a) {
xdebug_debug_zval('a');
$a = 3;
//$g_a = 2;
xdebug_debug_zval('a');
xdebug_debug_zval('g_a');
}
xdebug_debug_zval('g_a');
echo "---".PHP_EOL;
func($g_a);
echo "---".PHP_EOL;
xdebug_debug_zval('g_a');
说明:函数内部 会先建立一个和全局变量同名的变量 且指向同一个zval,然后赋值给本地变量$a
输出:
g_a: (refcount=1, is_ref=0)='1'
---
a: (refcount=3, is_ref=0)='1'
a: (refcount=1, is_ref=0)=3
g_a: (refcount=2, is_ref=0)='1'
---
g_a: (refcount=1, is_ref=0)='1'
或者输出:(恢复注释)
g_a: (refcount=1, is_ref=0)='1'
---
a: (refcount=3, is_ref=0)='1'
a: (refcount=1, is_ref=0)=2
g_a: (refcount=2, is_ref=0)='1'
---
g_a: (refcount=1, is_ref=0)='1'
~
以下代码和以上类似:(和变量名无关 变量名一般会重写的)
<?php
$g_a = '1';
function func($g_a) {
xdebug_debug_zval('g_a');
$g_a = 3;
//$g_a = 2;
xdebug_debug_zval('g_a');
xdebug_debug_zval('g_a');
}
xdebug_debug_zval('g_a');
echo "---".PHP_EOL;
func($g_a);
echo "---".PHP_EOL;
xdebug_debug_zval('g_a');
~