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脚本代码
Feb 19 PHP
PHP怎么实现网站保存快捷方式方便用户随时浏览
Aug 15 PHP
php中的路径问题与set_include_path使用介绍
Feb 11 PHP
php 伪静态之IIS篇
Jun 02 PHP
PHP高手需要要掌握的知识点
Aug 21 PHP
推荐一款MAC OS X 下php集成开发环境mamp
Nov 08 PHP
thinkphp的URL路由规则与配置实例
Nov 26 PHP
php抽象方法和抽象类实例分析
Dec 07 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
Dec 08 PHP
PHP学习笔记之session
May 06 PHP
实例讲解PHP验证邮箱是否合格
Jan 28 PHP
PHP dirname简单使用代码实例
Nov 13 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
模仿OSO的论坛(五)
2006/10/09 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
2014/06/26 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
2016/11/14 PHP
关于Jqzoom的使用心得 jquery放大镜效果插件
2010/04/12 Javascript
asp.net中System.Timers.Timer的使用方法
2013/03/20 Javascript
node.js中的favicon.ico请求问题处理
2014/12/15 Javascript
JavaScript简介
2015/02/15 Javascript
coffeescript使用的方式汇总
2015/08/05 Javascript
全面解析Bootstrap表单使用方法(表单控件)
2015/11/24 Javascript
JavaScript中的return语句简单介绍
2015/12/07 Javascript
JavaScript+html5 canvas绘制的小人效果
2016/01/27 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
JavaScript中的await/async的作用和用法
2016/10/31 Javascript
ES6使用let命令更简单的实现块级作用域实例分析
2017/03/31 Javascript
jQuery实现可兼容IE6的滚动监听功能
2017/09/20 jQuery
node中的cookie的具体使用
2018/09/13 Javascript
加快Vue项目的开发速度的方法
2018/12/12 Javascript
[02:17]TI4西雅图DOTA2前线报道 啸天mik夫妻档解说
2014/07/08 DOTA
[03:09]2014DOTA2国际邀请赛 Mushi前队友送上祝福
2014/07/12 DOTA
Python制作数据导入导出工具
2015/07/31 Python
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
2018/01/24 Python
Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事项
2018/11/30 Python
Python 常用模块 re 使用方法详解
2019/06/06 Python
pyqt5 实现在别的窗口弹出进度条
2019/06/18 Python
python项目对接钉钉SDK的实现
2019/07/15 Python
Django ORM多对多查询方法(自定义第三张表&amp;ManyToManyField)
2019/08/09 Python
关于Python错误重试方法总结
2021/01/03 Python
CSS3制作炫酷带方向感应的鼠标滑过图片3D动画
2016/03/16 HTML / CSS
FLOS美国官网:意大利高级照明工艺的传奇
2018/08/07 全球购物
小学校长竞聘演讲稿
2014/05/16 职场文书
法定代表人资格证明书
2014/09/11 职场文书
2016年社区创先争优活动总结
2016/04/05 职场文书
大学迎新生的欢迎词
2019/06/25 职场文书
常用的Python代码调试工具总结
2021/06/23 Python
使用 CSS 轻松实现一些高频出现的奇形怪状按钮
2021/12/06 HTML / CSS
Nginx配置根据url参数重定向
2022/04/11 Servers