PHP 静态变量处理

static $cb = 1;
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');
~                        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值