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

发布网友 发布时间:2022-04-06 07:53

我来回答

4个回答

热心网友 时间:2022-04-06 09:22

你定义了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的回答,一激动就把分给了,没发现您是先回答的,在此表示抱歉~~~

热心网友 时间:2022-04-06 10:40

你看下这两段代码:

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的回答更符合我想要的解释!!
再次感谢您的热心指导~~~

热心网友 时间:2022-04-06 12:15

因为静态变量会在整个执行的过程中最先初始化后再执行后面的代码!

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

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);
}

热心网友 时间:2022-04-06 14:06

一般static用于类中,于普通函数中的变量没有多大的用处。
class Test{
public static $test;
public static function fun() {
xxxx

}

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

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

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

结果是

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

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com