教程集 www.jiaochengji.com
教程集 >  脚本编程  >  php  >  正文 PHP的静态变量的注意细节

PHP的静态变量的注意细节

发布时间:2017-10-25   编辑:jiaochengji.com
教程集为您提供PHP的静态变量的注意细节等资源,欢迎您收藏本站,我们将为您提供最新的PHP的静态变量的注意细节资源

只要在变量前加上关键字static,该变量就成为静态变量了。

<?php
  function test()
  {
    static $nm = ;
    $nm = $nm * ;
    print $nm."<br />";
  }
  // 第一次执行,$nm = 
  test();
  // 第一次执行,$nm = 
  test();
  // 第一次执行,$nm = 
  test();
?>

程序运行结果:
1
2
2
4
3
8


函数test()执行后,变量$nm的值都保存了下来了。

在class中经常使用到静态属性,比如静态成员、静态方法。

之前的公司的小兄弟要去面试PHP,他遇到了一道PHP基础面试题,大致内容是如下:

function test(){
   static $a = 0;
   $a ;
   echo "before unset ".$a."<br/>";
   unset($a);
   $a = 23;
   echo "after unset ".$a."<br/>";
}
test();
test();
test();

看到这题的时候,就注意到了stats这个标记了$a。就知道这题不会是第一反应的结果。(结果如下)

PHP运行结果

PHP运行结果

这个$a 值没有因为unset() 函数改变,而是一直在累计!!我知道unset()对应static状态的变量是无效的。我马上查看了手册
unset() 销毁指定的变量。
unset() 在函数中的行为会依赖于想要销毁的变量的类型而有所不同。
如果在函数中 unset() 一个全局变量,则只是局部变量被销毁,而在调用环境中的变量将保持调用 unset() 之前一样的值。
如果在函数中 <span>unset() 一个静态变量,那么在函数内部此静态变量将被销毁。但是,当再次调用此函数时,此静态变量将被复原为上次被销毁之前的值。</span>

其实这样这么理解:

PHP变量关系图

PHP变量关系图

PHP的内存地址跟变量直接就是通过这种方式进行关联的。一般的变量是是通过关联的方式指向对应的地址,而不是真是的值。所以unset()的过程,其实是断了之间的联系,而不是抹掉了内存地址的值。
而static在初始化变量的,仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。

您可能感兴趣的文章:
php页面静态化的小例子
php的static局部变量可以更改吗
PHP的静态变量的注意细节
php中static关键字的理解
php中对static关键字的理解
java中静态的内部类和非静态内部类详细区别
php中static 静态变量和普通变量的区别
php静态变量的作用是什么?
php-fpm两种进程管理模式详解
PHP作用域和文件夹操作示例

[关闭]
~ ~