static变量的一些疑惑

本文深入探讨PHP中static变量的执行顺序与作用机制,通过具体示例展示其如何在函数内部保持状态,并分析多个static定义语句的执行顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?php
function test($name){
	static $_trace =  array();
	$_trace[]=$name;
	var_dump($_trace);
}

for ($i=0; $i <3 ; $i++) { 
	test($i);
}
?>

上面的函数,输出的结果是

array
  0 => int 0
array
  0 => int 0
  1 => int 1
array
  0 => int 0
  1 => int 1
  2 => int 2
搜了下资料,说是定义static变量的这个动作之后执行一次,因为在第一次循环执行的时候已经定义了$_trace了,所以第二次循环的时候,再执行这句话,就不会在执行了

但是

<?php
function test($name){
	static $_trace =  array();
	$_trace[]=$name;
	static $_trace =  array(1,2);
	static $_trace =  array(1,2,3);  
	static $_trace =  array(1,2,3,'aaa','aadd');
	var_dump($_trace);
}

for ($i=0; $i <3 ; $i++) { 
	test($i);
}
?>
按照我的理解来说,结果应该是和开始的函数是一样的,但是

array
  0 => int 1
  1 => int 2
  2 => int 3
  3 => string 'aaa' (length=3)
  4 => string 'aadd' (length=4)
  5 => int 0

array
  0 => int 1
  1 => int 2
  2 => int 3
  3 => string 'aaa' (length=3)
  4 => string 'aadd' (length=4)
  5 => int 0
  6 => int 1

array
  0 => int 1
  1 => int 2
  2 => int 3
  3 => string 'aaa' (length=3)
  4 => string 'aadd' (length=4)
  5 => int 0
  6 => int 1
  7 => int 2
可以看出,定义static的值在函数运行最初的时候就定义好了,然后再才是开始执行函数的动作,否则数组也不会是这样的顺序

然后,总共有四个定义static的语句,但是,最后输出出来的是最后一个的定义的值,那么,当php在遇到定义static变量是在执行之前先比较这条语句在之前定义的时候是不是以相同的语句执行的,如果是,就不执行这条语句,不然则重新定义静态变量,还是在程序执行之前,直接取出最后一条,然后只执行最后一条定义语句???

纠结......


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值