关于php当中static关键字,资料上说只能初始化一次。但是数组变量在定义时赋值会被下一次初始化覆盖?!
我就想真对这种现象求一个合理的解释。我用的是php5,以下是截图,为何f1和f2的执行结果不同?下面是结果小弟诚心求教第一次就5分提问15分悬赏所以那些“呵呵”、“不知道...
我就想真对这种现象求一个合理的解释。我用的是php5,以下是截图,为何f1和f2的执行结果不同?
下面是结果
小弟诚心求教第一次就5分提问15分悬赏所以那些“呵呵”、“不知道”、“不清楚”、“可能”、“自己看资料”、“w3c”、“你去看韩xx的视屏”、“这不适用”、“你就不该这么写”之流的装逼达人们可以直接滚蛋了!在线等待phper的解答! 展开
下面是结果
小弟诚心求教第一次就5分提问15分悬赏所以那些“呵呵”、“不知道”、“不清楚”、“可能”、“自己看资料”、“w3c”、“你去看韩xx的视屏”、“这不适用”、“你就不该这么写”之流的装逼达人们可以直接滚蛋了!在线等待phper的解答! 展开
4个回答
展开全部
你定义了static 就是静态变量
但是静态变量的初始化只进行一次,而且是定义静态变量的时候初始化
static $a = array(1,2,3);
print_r($a);
static $a = array();
这样实际上是定义了两次静态变量,并初始化,实际做会执行其中一个
就是后面这个
上面的代码实际上会被编译器编程这样
<?php
function f1(){
static $a = array();
print_r($a);
print_r($a);
}
function f2(){
static $a = array();
$a[] = 1;
$a[] = 2;
$a[] = 3;
print_r($a);
print_r($a);
}
但是静态变量的初始化只进行一次,而且是定义静态变量的时候初始化
static $a = array(1,2,3);
print_r($a);
static $a = array();
这样实际上是定义了两次静态变量,并初始化,实际做会执行其中一个
就是后面这个
上面的代码实际上会被编译器编程这样
<?php
function f1(){
static $a = array();
print_r($a);
print_r($a);
}
function f2(){
static $a = array();
$a[] = 1;
$a[] = 2;
$a[] = 3;
print_r($a);
print_r($a);
}
追问
谢谢您的指导~~~您的回答也十分的好!由于先看到了nekchen的回答,一激动就把分给了,没发现您是先回答的,在此表示抱歉~~~
展开全部
你看下这两段代码:
function f2(){
static $a= array(1,2,3);
print_r($a);
$a[]=1;
$a[]=2;
$a[]=3;
print_r($a);
$a= array();
print_r($a);
}
function f2(){
static $a= array(1,2,3);
print_r($a);
$a[]=1;
$a[]=2;
$a[]=3;
print_r($a);
static $a= array();
print_r($a);
}
添加了static修饰符的变量即使在该函数执行完毕值仍然不会丢失,也就是说,在下一次调用这个函数时,变量仍然记得原来的值。如:
<?php
function test()
{
static $var1=1;
$var1+=2;
echo $var1.' ';
}
test();
test();
test();
?>
运行结果如下:
3 5 7
追问
谢谢您的热心指点!!!不过我觉得nekchen的回答更符合我想要的解释!!
再次感谢您的热心指导~~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为静态变量会在整个执行的过程中最先初始化后再执行后面的代码!
其实相当于执行如下代码:
function f1()
{
static $a = array(1,2,3);
static $a = array();
print_r($a);
print_r($a);
}
function f2()
{
static $a = array();
static $a = array();
$a[] = 1;
$a[] = 2;
$a[] = 3;
print_r($a);
print_r($a);
}
其实相当于执行如下代码:
function f1()
{
static $a = array(1,2,3);
static $a = array();
print_r($a);
print_r($a);
}
function f2()
{
static $a = array();
static $a = array();
$a[] = 1;
$a[] = 2;
$a[] = 3;
print_r($a);
print_r($a);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询