关于php当中static关键字,资料上说只能初始化一次。但是数组变量在定义时赋值会被下一次初始化覆盖?!

我就想真对这种现象求一个合理的解释。我用的是php5,以下是截图,为何f1和f2的执行结果不同?下面是结果小弟诚心求教第一次就5分提问15分悬赏所以那些“呵呵”、“不知道... 我就想真对这种现象求一个合理的解释。我用的是php5,以下是截图,为何f1和f2的执行结果不同?

下面是结果

小弟诚心求教第一次就5分提问15分悬赏所以那些“呵呵”、“不知道”、“不清楚”、“可能”、“自己看资料”、“w3c”、“你去看韩xx的视屏”、“这不适用”、“你就不该这么写”之流的装逼达人们可以直接滚蛋了!在线等待phper的解答!
展开
 我来答
cslgpl
2013-08-02 · TA获得超过460个赞
知道小有建树答主
回答量:563
采纳率:0%
帮助的人:235万
展开全部
你定义了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);
}
追问
谢谢您的指导~~~您的回答也十分的好!由于先看到了nekchen的回答,一激动就把分给了,没发现您是先回答的,在此表示抱歉~~~
dlong1632
2013-08-02 · TA获得超过280个赞
知道小有建树答主
回答量:334
采纳率:0%
帮助的人:260万
展开全部

你看下这两段代码:

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的回答更符合我想要的解释!!
再次感谢您的热心指导~~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
nekchen
2013-08-02 · TA获得超过2501个赞
知道小有建树答主
回答量:1086
采纳率:42%
帮助的人:279万
展开全部
因为静态变量会在整个执行的过程中最先初始化后再执行后面的代码!

其实相当于执行如下代码:

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);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
caiaolin
2013-08-02 · TA获得超过664个赞
知道小有建树答主
回答量:621
采纳率:0%
帮助的人:458万
展开全部
一般static用于类中,于普通函数中的变量没有多大的用处。
class Test{
public static $test;
public static function fun() {
xxxx

}

}
你就可以在代码中直接Test::fun();而不用new一个实例··
追问

谢谢你热心的解答,虽然没有正面回答我的问题...

上面的这种情况是否与php中数组的定义和内存分布有关?以下是一个普通变量的重定义:

结果是

看起来第二次声明会覆盖第一次。但是为何f2()中的数组元素却不受影响?为何f1()中声明时的赋值不起作用?

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式