static字面意思就是静态的,在PHP中,static是一个关键字,可以用来修饰变量和函数。
静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该 区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址不变,直到整个程序运行结束,静态变量虽在程序的整个执行过程中始终存在,但是在它作用域之外不能使用。
auto自动变量,即动态局部变量,属于动态存储类别,占动态存储空间,函数调用结束后即释放。
静态变量的声明和初始化:
<?php function test(){} class Test{} $b = 1; static $a; static $a = 1; static $a = 1 + 2; static $a = $b; //Fatal error: Constant expression contains invalid operations static $a = test(); //Fatal error: Constant expression contains invalid operations static $a = new Test(); //Fatal error: Constant expression contains invalid operations /*********正确的使用方式如下*****************/ static $a;$a = $b;$a = test();$a = new Test();静态函数是在类中使用staitc修饰的函数,在类定义的时候已经被装载和分配。而非静态函数是不加static关键字的函数,在类定义时没有占用内存,只有在类被实例化成对象时,对象调用该函数才被分配内存。
静态函数中只能调用静态成员或者方法,不能调用非静态函数或者非静态成员,而非静态函数既可以调用静态成员或者方法又可以调用其他的非静态成员或者函数。
注意:static只能修饰类中的函数。
首先,我们做一个测试
<?php function staticTest() { static $num = 0; echo $num++; } staticTest(); //0 staticTest(); //1 staticTest(); //2我们可以看到,在调用函数的时候,static变量只初始化了一次,在项目中,我们可以用它来干什么呢,来看一个例子:
<?php class Test { function __construct() { echo 1; } function get() { echo 2; } } function staticTest() { static $a = false; if(!$a) { $a = new Test(); } $a->get(); } staticTest(); //12 staticTest(); //2 staticTest(); //2在上面这个例子中,多次调用函数时,使用静态变量保存对象可以减少对new的调用,提高效率。
转载于:https://www.cnblogs.com/shamohai/p/8299101.html
