小白兔晒黑了

导航

 

1 概述

静态变量(Static Variable)是一种在程序运行时只分配一次内存的变量,它们属于类,而不是类的任何特定实例。 静态变量使用 static 关键字声明。这意味着无论创建了多少类的实例,类的所有实例都共享同一个静态变量。这些特性使得静态变量非常适用于存储类级别的信息或常量值。

2 特点   

  • 类级别的变量:静态变量属于类,而不是对象实例。这意味着所有实例共享相同的静态变量。
  • 全局访问:静态变量可以在不创建类实例的情况下访问。
  • 内存管理:静态变量在程序启动时创建,在程序结束时销毁。
  • 默认值:如果未显式初始化,静态变量会被赋予其类型的默认值(例如,数值类型的默认值是 0,布尔类型的默认值是 false,对象引用的默认值是 null)。

 

3 实例

function track_time_called()
{
    static $i ;
    $i++;
    return $i;
}

$i = track_time_called();
var_dump($i);//1

$i = track_time_called();
var_dump($i);//2

$i = track_time_called();
var_dump($i);//3

 

/*
在这个示例中,无论创建多少个 MyClass 的实例,staticCounter 都是同一个变量,它的值会随着每个新实例的创建而增加。而 instanceCounter 是一个实例变量,它对每个实例都是独立的。
*/

class MyClass {
    // 静态变量
    static public  $staticCounter =100 ;
    // 实例变量
    public  $instanceCounter = 100;
    public  function myFun() {
        self::$staticCounter ++;
        $this->instanceCounter++;
    }
}

$myObj = new MyClass();

$myObj->myFun();
var_dump(MyClass::$staticCounter);//int(101)
var_dump($myObj->instanceCounter);//int(101)
$myObj->myFun();
var_dump(MyClass::$staticCounter);//int(102)
var_dump($myObj->instanceCounter);//int(102)


$myObj2 = new MyClass();

$myObj2->myFun();
var_dump(MyClass::$staticCounter);//int(103)
var_dump($myObj2->instanceCounter);//int(101)

 

4 使用场景   

  • 全局计数器或共享数据
  • 常量值(通常与 final 关键字结合使用)
  • 单例模式(确保类只有一个实例)
  • 实用工具或帮助方法(不依赖于类实例的状态)

5 注意事项

在多线程环境下使用静态变量时要特别小心,因为静态变量由所有线程共享,可能导致数据不一致性和线程安全问题。在这种情况下,您可能需要同步机制来保证静态变量的线程安全。

posted on 2024-09-03 20:11  小白兔晒黑了  阅读(118)  评论(0)    收藏  举报