设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 数据 手机 公司
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP中static变量有什么用途,怎样应用呢?

发布时间:2023-01-02 08:44 所属栏目:121 来源:互联网
导读:关于PHP中static变量有何用途,怎样应用呢?的知识有一些人不是很理解,对此小编给大家总结了相关内容,具有一定的参考借鉴价值,而且易于学习与理解,希望能对大家有所帮助,有这个方面学习需要的朋友就继续往下看吧。 函数内的static变量 static静态变量的
  关于“PHP中static变量有何用途,怎样应用呢?”的知识有一些人不是很理解,对此小编给大家总结了相关内容,具有一定的参考借鉴价值,而且易于学习与理解,希望能对大家有所帮助,有这个方面学习需要的朋友就继续往下看吧。
 
  函数内的static变量
 
  static静态变量的理解
 
  静态变量 类型说明符是static。
 
  静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在 静态存储区内分配存储单元),该区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址不变,直 到整个程序运行结束(相反,而auto自动变量,即动态局部变量,属于动态存储类别,占动态存储空间,函数调用结束后即释放)。静态变量虽在程序的整个执行过程中始终存在,但是在它作用域之外不能使用。
 
  另外,属于静态存储方式的量不一定就是静态变量。 例如:外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。
 
  所有的全局变量都是静态变量,而局部变量只有定义时加上类型修饰符static,才为局部静态变量。
 
  静态变量可以在任何可以申请的地方申请,一旦申请成功后,它将不再接受其他的同样申请。
 
  静态变量并不是说其就不能改变值,不能改变值的量叫常量。 其拥有的值是可变的 ,而且它会保持最新的值。说其静态,是因为它不会随着函数的调用和退出而发生变化。即上次调用函数的时候,如果我们给静态变量赋予某个值的话,下次函数调用时,这个值保持不变。
 
  函数内静态变量
 
  static usage
 
  1,请看下面这个例子:
 
  function doStuff(&$cache) {
 
      static $cache = null;
 
      if ($cache === null) {
 
          echo $cache = '%heavy database stuff or something%';
 
      }
 
  }
 
  $cache = 'not null';
 
  doStuff($cache);
 
  // Output
 
  %heavy database stuff or something%
 
  从上面的例子可以看出,static关键字影响了引用传递,即使我们使用了&来试图改变变量$cache的值和地址,仍然不影响doStuff()函数中的if判断;
 
  而且,在doStuff()函数中,静态变量$cache并不是不可改变的,$cache从null变成了%heavy database stuff or something%;
 
  类中的静态方法和属性
 
  ● 我们把类当成生成对象的模板,把对象作为活动组件,实例化一个类,得到一个对象,然后访问这个对象的方法和属性。
 
  例如 $foo = new Foo(); $foo就是类Foo实例化后的对象。
 
  ● 静态方法是以类作为作用域的函数,我们可以不经实例化,直接访问静态方法.
 
  例如:
 
  class Foo()
 
  {
 
      public static function a(){}
 
  }
 
  // 访问a();
 
  Foo::a();
 
  ● 静态方法不能访问这个类中的普通属性和方法,因为那些属性和方法属于一个对象,而静态方法和属性又称为类变量的方法。
 
  ● 在当前类(非子类)中访问静态方法或属性使用self::method(),note: self可以调用父类的静态方法和属性;
 
  延迟静态绑定
 
  先看个例子
 
  header("Content-type: text/html; charset=utf-8");
 
  class A
 
  {
 
      public static function aa()
 
      {
 
          echo "非延迟静态绑定
 
  ";
 
      }
 
      public static function bb()
 
      {
 
          echo self::aa();  // Output 非延迟静态绑定
 
          echo static::aa(); // Output 延迟静态绑定
 
      }
 
  }
 
  class B extends A
 
  {
 
      public static function aa()
 
      {
 
          echo "延迟静态绑定";
 
      }
 
      public static function cc()
 
      {
 
         echo self::bb();
 
      }
 
  }
 
  B::bb();
 
  // Output
 
  非延迟静态绑定
 
  延迟静态绑定
 
  使用self关键字,指是当前类(A),因此获取的也就是类A的aa()方法的返回值;
 
  php5.3之后,我们可以使用static来获取子类的aa()方法,它指的的被调用的类。
 
  总结:
 
  static关键字的延迟绑定有很多用途,一般在项目中可边做边总结。
 
  感谢各位的阅读,以上就是“PHP中static变量有何用途,怎样应用呢?”的内容了,经过本文的学习后,相信大家对PHP中static变量有何用途,怎样应用呢?都有更深刻的体会了吧。
 

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读