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 相关文章推荐
Win9x/ME下Apache+PHP安装配置
Oct 09 PHP
windows下升级PHP到5.3.3的过程及注意事项
Oct 12 PHP
php长字符串定义方法
Jul 12 PHP
PHP编程函数安全篇
Jan 08 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
Apr 23 PHP
解析PHP实现下载文件的两种方法
Jul 05 PHP
php查找任何页面上的所有链接的方法
Dec 03 PHP
php输出xml必须header的解决方法
Oct 17 PHP
php根据一个给定范围和步进生成数组的方法
Jun 19 PHP
HTML中嵌入PHP的简单方法
Feb 16 PHP
PHP 接入微信扫码支付总结(总结篇)
Nov 03 PHP
Laravel 数据库加密及数据库表前缀配置方法
Oct 10 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分页显示制作详细讲解
2006/10/09 PHP
让你同时上传 1000 个文件 (一)
2006/10/09 PHP
一些使用频率比较高的php函数
2008/10/03 PHP
php连接与操作PostgreSQL数据库的方法
2014/12/25 PHP
JavaScript CSS菜单功能 改进版
2008/12/20 Javascript
jQuery的一些特性和用法整理小结
2010/01/13 Javascript
JQERY limittext 插件0.2版(长内容限制显示)
2010/08/27 Javascript
JS实现程序暂停与继续功能代码解读
2013/10/10 Javascript
jQuery的context属性用法实例
2014/12/27 Javascript
Bootstrap树形控件使用方法详解
2016/01/27 Javascript
nodejs 中模拟实现 emmiter 自定义事件
2016/02/22 NodeJs
bootstrap手风琴制作方法详解
2017/01/11 Javascript
JavaScript中Require调用js的实例分享
2017/10/27 Javascript
JavaScript的setter与getter方法
2017/11/29 Javascript
React中的render何时执行过程
2018/04/13 Javascript
vue多级复杂列表展开/折叠及全选/分组全选实现
2018/11/05 Javascript
js中null与空字符串&quot;&quot;的区别讲解
2019/01/17 Javascript
eslint 的三大通用规则详解
2019/05/16 Javascript
Vue前端判断数据对象是否为空的实例
2020/09/02 Javascript
简单介绍Python中的round()方法
2015/05/15 Python
解决Python出现_warn_unsafe_extraction问题的方法
2016/03/24 Python
Python快速从注释生成文档的方法
2016/12/26 Python
关于Python 3中print函数的换行详解
2017/08/08 Python
Python实现自动发送邮件功能
2021/03/02 Python
matplotlib设置legend图例代码示例
2017/12/19 Python
TensorFlow实现Logistic回归
2018/09/07 Python
Python OpenCV调用摄像头检测人脸并截图
2020/08/20 Python
解决pytorch下出现multi-target not supported at的一种可能原因
2021/02/06 Python
英国家用电器购物网站:Hughes
2018/02/23 全球购物
行政总经理岗位职责
2013/12/05 职场文书
优秀部门获奖感言
2014/02/14 职场文书
《小壁虎借尾巴》教学反思
2014/02/16 职场文书
购房协议书
2014/04/11 职场文书
2014年教师节演讲稿范文
2014/09/10 职场文书
基层党建工作简报
2015/07/21 职场文书
HR必备:销售经理聘用合同范本
2019/08/21 职场文书