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 04 PHP
windows下zendframework项目环境搭建(通过命令行配置)
Dec 06 PHP
php中的PHP_EOL换行符详细解析
Oct 26 PHP
Laravel 5.0 发布 新版本特性详解
Feb 10 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
Dec 02 PHP
php 数组字符串搜索array_search技巧
Jul 05 PHP
php实现文章置顶功能的方法
Oct 20 PHP
PHP合并数组的2种方法小结
Nov 24 PHP
PHP生成随机数的方法总结
Mar 01 PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
Mar 07 PHP
PHP小程序支付功能完整版【基于thinkPHP】
Mar 26 PHP
thinkphp5框架扩展redis类方法示例
May 06 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
德生S2000南麂列岛台湾FM收听记录
2021/03/02 无线电
咖啡的植物学知识
2021/03/03 咖啡文化
PHP 正则表达式常用函数
2014/08/17 PHP
完美解决thinkphp验证码出错无法显示的方法
2014/12/09 PHP
PHP开发Apache服务器配置
2015/07/15 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
详解Yaf框架PHPUnit集成测试方法
2017/12/27 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
php防止表单重复提交实例讲解
2019/02/11 PHP
用JS提交参数创建form表单在FireFox中遇到的问题
2013/01/16 Javascript
JavaScript获取路径设计源码
2014/05/22 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
2015/09/01 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
jqueryMobile 动态添加元素,展示刷新视图的实现方法
2016/05/28 Javascript
基于Vuejs的搜索匹配功能实现方法
2018/03/03 Javascript
一个Vue视频媒体多段裁剪组件的实现示例
2018/08/09 Javascript
JavaScript this关键字指向常用情况解析
2020/09/02 Javascript
使用Python多线程爬虫爬取电影天堂资源
2016/09/23 Python
基于python(urlparse)模板的使用方法总结
2017/10/13 Python
Python 2.x如何设置命令执行的超时时间实例
2017/10/19 Python
分数霸榜! python助你微信跳一跳拿高分
2018/01/08 Python
PyQt4实现下拉菜单可供选择并打印出来
2018/04/20 Python
Python实现计算圆周率π的值到任意位的方法示例
2018/05/08 Python
pygame游戏之旅 创建游戏窗口界面
2018/11/20 Python
Python基于pyecharts实现关联图绘制
2020/03/27 Python
学python需要去培训机构吗
2020/07/01 Python
CSS伪类与CSS伪元素的区别及由来具体说明
2012/12/07 HTML / CSS
7款设计巧妙的css3飘带状3D立体效果的导航菜单和表单窗口
2013/02/04 HTML / CSS
拉斯维加斯酒店、演出、旅游、俱乐部及更多:Vegas.com
2019/02/28 全球购物
阿联酋航空丹麦官方网站:Emirates DK
2019/08/25 全球购物
G-Form护具官方网站:美国运动保护装备
2019/09/04 全球购物
四个太阳教学反思
2014/02/01 职场文书
老公爱的承诺书
2014/03/31 职场文书
2014年无财产无子女离婚协议书范本
2014/10/09 职场文书
新郎父亲婚礼致辞
2015/07/27 职场文书
学校2016年圣诞节活动总结
2016/03/31 职场文书