php中static的用法

来源:互联网 发布:中华家长 知乎 编辑:程序博客网 时间:2024/06/05 06:55

      大家都知道,static是静态变量或者静态方法的修饰符,那么就static的用法举几个简单的例子加以说明

 在普通函数中的用法:

   function test(){
     
static $a = 1;
$a +=1;
     echo $a.' ';
  
   }
  test();   //2
  test();   //3
  test();   //4

说明:普通函数中,static 局部变量当函数被执行的时候,只初始化一次,然后保存函数作用以后的值,下次再调用的时候,用的是作用以后的值,不会再初始化


类中static的用法:

需要说明的是,如果实例化了一个对象,那么var_dump($object)的时候,静态属性不会显示出来

  class A{
  
    public static $a = 1;
public function test(){

  self::$a +=1;
  echo self::$a;
   var_dump($this);               //object(B)#1 (0) { }这里说明下的是$this的用法,后面单独说
}
  
  }
  class B extends A{
    
    }
  $b = new B;
  $b->test();                  //2
  B::$a = 'hello';
  echo A::$a.'||'.B::$a;   //hello||hello

如果子类中没有重写父类的属性,那么公用其中的一个$a,在子类的对象或者父类静态调用或者改变$a的值的时候,那么这个值就会改变,无论子类或者父类再调用的时候,都会显示改变后的值。

  class C{
  
    public static $a = 1;
public function test(){

  self::$a +=1;
  echo self::$a.'||';
}
  
  }
  class D extends C{
    
    public static $a = 'hello';
  }
  $d = new D;
  $d->test();


  echo C::$a.'||'.D::$a;
  D::$a = 'hello,world';
  echo '<br/>';
  echo C::$a.'||'.D::$a;

执行结果:

    2||2||hello
    2||hello,world

如果子类中重写了静态属性,那么相当于父类和子类中各有一份自己的$a,改变任何其中的一个不会对另外的那个类造成影响。

static还有另外的一种用法是static可以做静态延迟绑定。

  class A{
public static  $name = 'xiaoming';


public static function f(){
 
  echo static::$name;
}


}
  }
  class B extends A{


     public static $name = 'xiao';
public static function f1(){
 
  echo self::$name;
}
  }


  A::f();
  B::f1();
  B::f();

输出的结果是:

xiaomingxiaoxiao

其中static代表的是当前调用类,是在执行脚本的时候去调用的,可以理解为,是和类B绑定的,所以才会输出B的name。

至此static的用法已经算是完成,其实也就是上述的三种:

1.局部变量

2.类的成员,包括成员属性和成员方法

3.静态延迟绑定


0 0
原创粉丝点击