php中static 静态变量和普通变量的区别


Posted in PHP onDecember 01, 2016

php中static 静态变量和普通变量的区别

在变量的前面加上static 就构成了静态变量(static 变量)。

static变量和普通变量的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。

static变量和普通变量的区别:

static全局变量与普通全局变量区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
static局部变量和普通局部变量区别:static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。

在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量。

1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在)

2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)

3)作用域:全局静态变量在声明他的文件之外是不可见的。准确地讲从定义之处开始到文件结尾。

static 变量的好处:

不会被其他文件所访问,修改其他文件中可以使用相同名字的变量,不会发生冲突。

内存中的位置:静态存储区

初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)
作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。

 注:当static用来修饰局部变量的时候,它就改变了局部变量的存储位置,从原来的栈中存放改为静态存储区。但是局部静态变量在离开作用域之后,并没有被销毁,而是仍然驻留在内存当中,直到程序结束,只不过我们不能再对他进行访问。
当static用来修饰全局变量的时候,它就改变了全局变量的作用域(在声明他的文件之外是不可见的),但是没有改变它的存放位置,还是在静态存储区中。

普通函数实例:

<?php
function Test() {
  $w3sky = 0;
  echo $w3sky;
  $w3sky++;
  /*函数每次调用时都会将 $w3sky 的值设为 0 并输出 "0"。将变量加一的 $w3sky++ 没有其到效果,因为一旦退出本函数则变量 $w3sky 就不存在了。*/
}
?>

 要将变量 $w3sky 定义为静态(static)的,代码如下:

<?php
function Test() {
  static $w3sky = 0;
  echo $w3sky;
  $w3sky++;
} //本函数每调用Test()都会输出 $w3sky 的值并加一。

?>

 静态变量也提供了一种处理递归函数的方法。递归函数是一种自己调用自己的方法。写递归函数时要小心,因为可能会无穷递归下去,没有出口.务必确保 有方法来中止递归。以下这个简单的函数递归计数到 10,使用静态变量 $count 来判断何时停止, 静态变量与递归函数的例子:

<?php
function Test() {
  static $count = 0;
  $count++;
  echo $count;
  if ($count < 10) {
    Test();
  }
  $count--;
}
?>

注: 静态变量不能用表达式的方式声明例如:static $int = 1+2; 这种方式就是错的  而static $int = 1; 这种声明方式则是对的。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

PHP 相关文章推荐
THINKPHP+JS实现缩放图片式截图的实现
Mar 07 PHP
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
Jul 29 PHP
深入探讨<br />和 \r\n两者有什么区别??
Jun 05 PHP
CodeIgniter图像处理类的深入解析
Jun 17 PHP
如何取得中文字符串中出现次数最多的子串
Aug 08 PHP
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
Apr 03 PHP
WordPress中获取页面链接和标题的相关PHP函数用法解析
Dec 17 PHP
php构造方法中析构方法在继承中的表现
Apr 12 PHP
深入理解PHP JSON数组与对象
Jul 19 PHP
PHP实现的链式队列结构示例
Sep 15 PHP
PHP快速排序算法实现的原理及代码详解
Apr 03 PHP
php session_decode函数用法讲解
May 26 PHP
php 如何禁用eval() 函数实例详解
Dec 01 #PHP
php+mysql实现简单登录注册修改密码网页
Nov 30 #PHP
thinkPHP模板中函数的使用方法示例
Nov 30 #PHP
thinkPHP模板中for循环与switch语句用法示例
Nov 30 #PHP
thinkPHP自定义类实现方法详解
Nov 30 #PHP
php版阿里大于(阿里大鱼)短信发送实例详解
Nov 30 #PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
Nov 30 #PHP
You might like
php多次include后导致全局变量global失效的解决方法
2015/02/28 PHP
JavaScript实现禁止后退的方法
2006/12/27 Javascript
有关JavaScript的10个怪癖和秘密分享
2011/08/28 Javascript
javascript中2个感叹号的用法实例详解
2014/09/04 Javascript
JS验证邮件地址格式方法小结
2015/12/01 Javascript
jQuery实现监控页面所有ajax请求的方法
2015/12/10 Javascript
jquery插件ContextMenu设置右键菜单
2017/03/13 Javascript
jQuery niceScroll滚动条错位问题的解决方法
2018/02/03 jQuery
vue 表单输入格式化中文输入法异常问题
2018/05/30 Javascript
vue 登录滑动验证实现代码
2018/08/24 Javascript
jsonp跨域获取百度联想词的方法分析
2019/05/13 Javascript
关于ckeditor在bootstrap中modal中弹框无法输入的解决方法
2019/09/11 Javascript
[42:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 VG VS OpTic
2018/03/31 DOTA
[10:18]2018DOTA2国际邀请赛寻真——找回自信的TNCPredator
2018/08/13 DOTA
Python实现字典的key和values的交换
2015/08/04 Python
python虚拟环境virtualenv的使用教程
2017/10/20 Python
python3 实现调用串口功能
2019/12/26 Python
使用tensorboard可视化loss和acc的实例
2020/01/21 Python
python torch.utils.data.DataLoader使用方法
2020/04/02 Python
详解Python利用configparser对配置文件进行读写操作
2020/11/03 Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
2021/02/22 Python
详解python第三方库的安装、PyInstaller库、random库
2021/03/03 Python
老生常谈CSS中的长度单位
2016/06/27 HTML / CSS
canvas基础之图形验证码的示例
2018/01/02 HTML / CSS
美国知名日用品连锁超市:Dollar General(多来店)
2017/01/14 全球购物
BudgetAir印度:预订航班、酒店和汽车租赁
2019/07/07 全球购物
在什么时候需要使用"常引用"
2015/12/31 面试题
局域网标准
2016/09/10 面试题
Java中的类包括什么内容?设计时要注意哪些方面
2012/05/23 面试题
机械专业应届生求职信
2013/09/21 职场文书
银行出纳岗位职责
2013/11/25 职场文书
新疆民族团结演讲稿
2014/08/27 职场文书
详解Nginx 工作原理
2021/03/31 Servers
教你怎么用Python实现多路径迷宫
2021/04/29 Python
基于flask实现五子棋小游戏
2021/05/25 Python
django项目、vue项目部署云服务器的详细过程
2022/07/23 Servers