千家信息网

静态变量(static)

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,一、静态变量
千家信息网最后更新 2025年02月02日静态变量(static)

一、静态变量

/**

声明一个名为test的函数,测试在函数内部声明的静态变量的使用

*/

function test(){

static $a=0;

echo $a;

$a++;

}

test(); //第一次运行,输出0

test(); //第二次运行,输出1

test(); //第三次运行,输出2

test(); //第四次运行,输出3

?>


在上例中,将函数中的局部变量$a,使用static关键词声明为静态变量,并赋初值为0.函数在第一次执行时,静态变量$a经运算后,从初值0变为1.当函数第一次执行完毕后,静态变量$a并没有被释放,而是将结果保存在静态内存中。第二次执行时,$a从内存中获取上一次计算的结果1,继续计算,并将结果2存于静态内存空间中。以后每次函数执行时,静态变量将从自己的静态内存空间中获取前次的储存结果,并以此为初值进行计算。


二、static关键字的使用

类中的静态成员是不需要对象而是使用类名来直接访问的,格式如下所示:

类名::静态成员属性名; //在类的外部和成员方法中都可以使用这种方式访问静态成员属 性

类名::静态成员方法(); //在类的外部和成员方法中都可以使用这种方式访问静态成员方 法


在类中声明的成员方法中,也可以使用关键字"self"来访问其他静态成员。因为静态成员是属于类的,而不属于任何对象,所以不能用$this来引用它,而在PHP中给我们提供的self关键字,就是在类的成员方法中用来代表本类的关键字。格式如下所示:

self::静态成员属性名; //在类的成员方法中使用这种方式访问本类中的静态成员属性

self::静态成员方法名(); //在类的成员方法中使用这种方式访问本类中的静态成员方法

class MyClass{

static $count; //在类中声明一个静态成员属性count,用于统计对象被创建的次数


function __construct(){ //每次创建一个对象就会自动调用一次这个构造方法

self::$count++; //使用self访问静态成员count,使其自增1

}


static function getCount(){ //声明一个静态方法,在类外面直接使用类名就可以调用

return self::$count; //在方法中使用self访问静态成员并返回

}

}

MyClass::$count=0; //在类外面使用类名访问类中的静态成员,为其初始化赋值0


$myc1=new MyClass(); //通过myclass类创建第一个对象,在构造方法中将count累加1

$myc2=new MyClass(); //通过myclass类创建第二个对象,在构造方法中又将count累加1

$myc3=new MyClass(); //通过myclass类创建第三个对象,在构造方法中再次将count累加1


echo MyClass::getCount(); //在类外面使用类名访问类中的静态成员方法,获取静态属性的值3

echo "
";

echo $myc3->getCount(); //通过对象也可以访问类中的静态成员方法,获取静态属性的值3

?>

代码运行结果为3 3

0