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 "非耽误静态绑定<br>"; } 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关键字的明白的细致内容,更多请关注ki4网别的相干文章!