专业游戏门户,分享手游网游单机游戏百科知识攻略!

嗨游网
嗨游网

static静态局部变量和静态全局变量的区别详解

来源:小嗨整编  作者:小嗨  发布时间:2024-03-15 08:24
摘要:局部变量从存储方式上可分为动态存储类型和静态存储类型。函数中的局部变量,如不专门声明为static存储类别,默认都是动态地分配存储空间。其中的内部动态变量在函数调用结束后自动释放。如果希望在函数执行后,其内部变量依然保存在内存中,应当使...

局部变量从存储方式上可分为动态存储类型和静态存储类型。函数中的局部变量,如不专门声明为 static 存储类别,默认都是动态地分配存储空间。其中的内部动态变量在函数调用结束后自动释放。如果希望在函数执行后,其内部变量依然保存在内存中,应当使用静态变量。在函数执行完毕以后,静态变量并不会消失,而是在所有对该函数的调用之间共享,即在函数再次执行时,静态变量将连续前次的结果继续运算,并且仅在脚本的执行期间函数第一次被调用时被初始化。要声明函数变量为静态的,需要使用关键字 static

static静态局部变量和静态全局变量的区别详解

前面我们介绍了php变量的范围之局部变量和php变量的范围之全局变量。静态变量可以在任何可以申请的地方申请,一旦申请成功后,它将不再接受其他的同样申请。

静态变量并不是说其就不能改变值,不能改变值的量叫常量。 其拥有的值是可变的 ,而且它会保持最新的值。说其静态,是因为它不会随着函数的调用和退出而发生变化。即上次调用函数的时候,如果我们给静态变量赋予某个值的话,下次函数调用时,这个值保持不变。

一、静态局部变量:

1、static类型的内部变量同auto自动变量(即未加 static 声明的局部变量)一样,是某个特定函数的局部变量,即只能在定义该变量的函数内使用该变量,两者作用域相同;两者的不同在于:auto自动变量会随着函数被调用和退出而存在和消失,而static类局部变量不会,它不管其所在的函数是否被调用,都将一直存在;不过,尽管该变量还继续存在,但不能使用它。倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值。换言之,static类型的内部变量是一种只能在某个特定函数中使用,但一直占据存储空间的变量。

2、函数体内如果在定义静态变量的同时进行了初始化,则以后程序不再进行初始化操作(出现在函数内部的基本类型的的静态变量初始化语句只有在第一次调用才执行)。而对自动变量赋初值是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。

3、静态局部变量的初始化表达式必须是一个常量或者常量表达式。即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。而对自动变量auto来说,如果不赋初值则它的值将是个不确定的值。

4、当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用(主要是变量的作用域造问题成的),因此仍以采用局部静态变量为宜。

注:局部静态变量占用内存时间较长,并且可读性差,因此,除非必要,尽量避免使用局部静态变量。

二、静态全局变量

全局变量(外部变量)的声明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。

static静态局部变量和静态全局变量区别

这两者的区别虽在于:

1、非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。

2、静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。

从以上分析可以看出————

把局部变量改变为静态变量后是改变了它的存储方式,即改变了它的生存期。

把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。static静态变量会被放在程序的全局存储区中(即在程序的全局数据区,而不是在堆栈中分配,所以不会导致堆栈溢出),这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量堆变量的区别。

示例代码如下所示:

';}local(); //1local(); //1local(); //1echo '===================================
'; /** static静态局部变量 */function static_local() { static $local = 0 ; //此处可以不赋0值 $local++; echo $local . '
';}static_local(); //1static_local(); //2static_local(); //3//echo $local; 注意虽然静态变量,但是它仍然是局部的,在外不能直接访问的。echo '=======================================
'; /** static静态全局变量(实际上:全局变量本身就是静态存储方式,所有的全局变量都是静态变量) */function static_global() { global $glo; //此处,可以不赋值0,当然赋值0,后每次调用时其值都为0,每次调用函数得到的值都会是1,但是不能想当然的写上"static"加以修饰,那样是错误的. $glo++; echo $glo . '
';}static_global(); //1static_global(); //2static_global(); //3?>
登录后复制

以上就是static静态局部变量和静态全局变量详解。

【相关教程推荐】

1. 《php独孤九贱(4)-php视频教程》

2.  php编程从入门到精通全套视频教程

3.  php实战视频教程

以上就是static静态局部变量和静态全局变量的区别详解的详细内容,更多请关注易企推科技其它相关文章!


本文地址:网络百科频道 https://www.eeeoo.cn/wangluo/1148208.html,嗨游网一个专业手游免费下载攻略知识分享平台,本站部分内容来自网络分享,不对内容负责,如有涉及到您的权益,请联系我们删除,谢谢!


网络百科
小编:小嗨整编
相关文章相关阅读
  • win7旗舰版和专业版的区别(win7旗舰版和专业版哪个好)?

    win7旗舰版和专业版的区别(win7旗舰版和专业版哪个好)?

    win7旗舰版和专业版的区别(win7旗舰版和专业版哪个好)?Windows7专业版和旗舰版主要区别是:旗舰版支持BitLocker加密 语音识别多语言显示界面等总的来说旗舰版相对于专业版来说更为全面且功能更加强大但在绝大多数情况下专业版已...

  • 绝地求生免费版在哪下(绝地求生免费版和付费版的区别)?

    绝地求生免费版在哪下(绝地求生免费版和付费版的区别)?

    绝地求生免费版在哪下(绝地求生免费版和付费版的区别)?绝地求生免费版的推出,许多玩家都想知道如何在哪儿下载这款游戏,以及免费版与付费版之间有何区别。绝地求生免费版在哪下绝地求生免费版于2022年1月12日上线,玩家可以在以下途径下载:1.官...

  • 绝地求生亚服第一是谁(绝地求生亚服和东南亚服的区别)?

    绝地求生亚服第一是谁(绝地求生亚服和东南亚服的区别)?

    绝地求生亚服第一是谁(绝地求生亚服和东南亚服的区别)?绝地求生亚服第一是若风,若风登顶了亚服第一,并在微博晒出了自己的成绩,连续6个通宵冲分绝地求生排行榜。绝地求生中,玩家可以选择不同的服务器进行游戏,其中亚服和东南亚服是许多国内玩家常选择...

  • 魔兽世界字体设置在哪(魔兽世界字体设置方法详解)?

    魔兽世界字体设置在哪(魔兽世界字体设置方法详解)?

    魔兽世界字体设置在哪(魔兽世界字体设置方法详解)?在魔兽世界这款备受喜爱的大型多人在线角色扮演游戏中,玩家们可以通过各种方式来打造属于自己的独特风格,改变字体就是一种简单有效的方法,本文将详细介绍如何在魔兽世界中修改字体,让你的游戏体验更具...

  • 梦幻西游时空区是什么意思(梦幻西游时空和梦幻的区别)?

    梦幻西游时空区是什么意思(梦幻西游时空和梦幻的区别)?

    梦幻西游时空区是什么意思(梦幻西游时空和梦幻的区别)?《梦幻西游》手游时空计划正式启动啦!这个计划是为了让所有等级89级及以下服务器的玩家都能够感受到更多的升级加速、福利玩法、以及更丰富的游戏体验!不知道大家对这个消息有没有跃跃欲试呢?时空...

  • dnf鬼泣技能详解(dnf鬼泣自带暗属性吗)?

    dnf鬼泣技能详解(dnf鬼泣自带暗属性吗)?

    dnf鬼泣技能详解(dnf鬼泣自带暗属性吗)?“鬼泣”是目前dnf手游中较为全面的一个角色,可做主力输出也可以当辅助职业。自带暗属性伤害,打造成本低,整体操作手感丝滑,范围大爆发的同时兼顾持续输出,相比起狂战士那种“莽夫型”职业,“鬼泣”的...

  • 微信拉黑和删除有什么区别(微信拉黑和删除怎么看出来)?

    微信拉黑和删除有什么区别(微信拉黑和删除怎么看出来)?

    微信拉黑和删除有什么区别(微信拉黑和删除怎么看出来)?很多人都不知道微信的“拉黑”与“删除”到底有什么区别?下面了看看微信拉黑和删除分别是什么样子。一、微信拉黑好友如果对方把你拉黑了,当你再次发消息给对方时,就会出现这样的提醒:消息已发出,...

  • 被动技能是什么意思(被动技能和主动技能的区别)?

    被动技能是什么意思(被动技能和主动技能的区别)?

    被动技能是什么意思(被动技能和主动技能的区别)?游戏中战斗对象的技能一般分为主动技能和被动技能。主动技能有明确的释放时机,被动技能一般是在某些特定事件发生时才会触发。被动技能一般在对象身上先挂一个manager,然后整个技能效果的实现包括几...

  • 周排行
  • 月排行
  • 年排行

精彩推荐