当前位置: 首页 > 后端技术 > PHP

php-static关键字

时间:2023-03-29 16:55:22 PHP

静态变量在函数中的理解static静态变量static变量类型说明符是static。静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区分配存储单元),该区的数据在整个程序运行过程中一直占用这些存储空间程序(程序整个运行过程中都没有释放),也可以认为其内存地址一直保持不变,直到整个程序结束(反之,auto自动变量,即动态局部变量,属于动态存储类,占用动态存储空间,函数调用结束后释放)。虽然静态变量在程序的整个执行过程中都存在,但不能在其范围之外使用。另外,属于静态存储方法的量不一定是静态变量。例如:外部变量虽然属于静态存储方式,但不一定是静态变量。它们必须被static定义,才能成为静态外部变量,或者静态全局变量。所有的全局变量都是静态变量,局部变量只有用类型修饰符static定义时才是局部静态变量。静态变量可以在任何地方申请,一旦申请成功,将不再接受其他相同的申请。静态变量并不意味着它不能改变它的值。不能改变其值的量称为常量。它持有的价值是可变的,并且它保留最新的价值。之所以说它是静态的,是因为它不会随着函数的调用和退出而改变。也就是说,上次调用函数时,如果我们给静态变量赋值,那么下次调用函数时,该值将保持不变。来源:http://blog.csdn.net/u0121118...函数中静态变量static的用法1,请看下面的例子:functiondoStuff(&$cache){static$cache=null;if($cache===null){echo$cache='%heavydatabasestufforsomething%';}}}$cache='notnull';doStuff($cache);//输出%heavydatabasestuff什么的%从上面的例子可以看出,static关键字影响了引用传递,即使我们使用&来尝试改变变量$cache的值和地址,仍然不影响doStuff()函数中的if判断;而且,在doStuff()函数中,静态变量$cache并不是不可变的,$cache已经从null变成了%heavydatabasestuff什么的%;对于类中的静态方法和属性,我们把类作为生成对象的模板,把对象作为活动的组件,实例化一个类,得到一个对象,然后访问这个对象的方法和属性。例如$foo=newFoo();$foo是类Foo的实例化对象。静态方法是一个以类为作用域的函数,我们可以直接访问静态方法而无需实例化。例如:classFoo(){publicstaticfunctiona(){}}//accessa();富::a();静态方法不能访问本类中的普通属性和方法,因为那些属性和方法属于一个对象,静态方法和属性也称为类变量的方法。访问当前类(不是子类)中的静态方法或属性,使用self::method(),注意:self可以调用父类的静态方法和属性;请参阅延迟静态绑定第一个示例header("Content-type:text/html;charset=utf-8");classA{publicstaticfunctionaa(){echo"non-delayedstaticbinding
";}publicstaticfunctionbb(){echoself::aa();//输出非延迟静态绑定echostatic::aa();//输出延迟静态绑定}}classBextendsA{publicstaticfunctionaa(){echo"delayedstaticbinding";}publicstaticfunctioncc(){echoself::bb();}}B::bb();//输出非延迟静态绑定延迟静态绑定使用了self关键字,它引用了当前类(A),所以得到的是的aa()方法的返回值A类;php5.3以后,我们可以使用static来获取子类的aa()方法,它引用了被调用的类。总结:static关键字的延迟绑定有很多用处,在项目中做的时候大致可以总结一下。