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 相关文章推荐
如何使用PHP中的字符串函数
Oct 09 PHP
ueditor 1.2.6 使用方法说明
Jul 24 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
Mar 28 PHP
PHP5.3安装Zend Guard Loader图文教程
Sep 29 PHP
php jsonp单引号转义
Nov 23 PHP
PHP中基本HTTP认证技巧分析
Mar 16 PHP
php生成过去100年下拉列表的方法
Jul 20 PHP
php使用curl代理实现抓取数据的方法
Feb 03 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
Mar 25 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 PHP
PHP清除缓存的几种方法总结
Sep 12 PHP
PHP静态延迟绑定和普通静态效率的对比
Oct 20 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 file_get_contents 函数超时的几种解决方法
2009/07/30 PHP
PHP Socket 编程
2010/04/09 PHP
php获取字段名示例分享
2014/03/03 PHP
php实现refresh刷新页面批量导入数据的方法
2014/12/23 PHP
php+ajax实现无刷新数据分页的办法
2015/11/02 PHP
PHP带节点操作的无限分类实现方法详解
2016/11/09 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
laravel框架中间件 except 和 only 的用法示例
2019/07/12 PHP
基于Laravel-admin 后台的自定义页面用法详解
2019/09/30 PHP
JavaScript取得鼠标绝对位置程序代码介绍
2012/09/16 Javascript
javascript实现无限级select联动菜单
2015/01/02 Javascript
JavaScript观察者模式(经典)
2015/12/09 Javascript
详解Javacript和AngularJS中的Promises
2016/02/09 Javascript
不间断循环滚动效果的实例代码(必看篇)
2016/10/08 Javascript
javascript实现弹出层效果
2019/12/10 Javascript
JavaScript onclick事件使用方法详解
2020/05/15 Javascript
Nuxt 嵌套路由nuxt-child组件用法(父子页面组件的传值)
2020/11/05 Javascript
linux系统使用python获取内存使用信息脚本分享
2014/01/15 Python
Python设计模式之工厂方法模式实例详解
2019/01/18 Python
用python解压分析jar包实例
2020/01/16 Python
python如何基于redis实现ip代理池
2020/01/17 Python
python使用Thread的setDaemon启动后台线程教程
2020/04/25 Python
python数据类型强制转换实例详解
2020/06/22 Python
如何解决pycharm调试报错的问题
2020/08/06 Python
使用Python爬虫爬取小红书完完整整的全过程
2021/01/19 Python
HTML5 Canvas draw方法制作动画效果示例
2013/07/11 HTML / CSS
详解HTML5中rel属性的prefetch预加载功能使用
2016/05/06 HTML / CSS
Lookfantastic德国官网:英国知名美妆购物网站
2017/06/11 全球购物
建筑设计所实习生自我鉴定
2013/09/25 职场文书
水污染治理专业毕业生推荐信
2013/11/14 职场文书
医药营销个人求职信范文
2014/02/07 职场文书
团结演讲稿范文
2014/05/23 职场文书
12.4法制宣传日活动总结
2014/08/26 职场文书
教师个人自我评价
2015/03/04 职场文书
《伯牙绝弦》教学反思
2016/02/16 职场文书
html中显示特殊符号(附带特殊字符对应表)
2021/06/21 HTML / CSS