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中include()与require()的区别说明
Mar 10 PHP
PHP array_flip() 删除重复数组元素专用函数
May 16 PHP
浅析php中抽象类和接口的概念以及区别
Jun 27 PHP
如何在Ubuntu下启动Apache的Rewrite功能
Jul 05 PHP
php通过function_exists检测函数是否存在的方法
Mar 18 PHP
win7安装php框架Yii的方法
Jan 25 PHP
PHP中FTP相关函数小结
Jul 15 PHP
PHP的自定义模板引擎
Mar 24 PHP
thinkPHP实现的省市区三级联动功能示例
May 05 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
Jun 20 PHP
Yii框架连表查询操作示例
Sep 06 PHP
PHP二维数组分页2种实现方法解析
Jul 09 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&amp;&amp;mysql)三
2006/10/09 PHP
cache_lite试用
2007/02/14 PHP
PHP生成Flash动画的实现代码
2010/03/12 PHP
smarty 缓存控制前的页面静态化原理
2013/03/15 PHP
thinkphp实现发送邮件密码找回功能实例
2014/12/01 PHP
php 命名空间(namespace)原理与用法实例小结
2019/11/13 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
JQuery DataTable删除行后的页面更新利用Ajax解决
2013/05/17 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
JS+CSS实现闪烁字体效果代码
2016/04/05 Javascript
微信小程序 详解页面跳转与返回并回传数据
2017/02/13 Javascript
微信小程序实现验证码获取倒计时效果
2018/02/08 Javascript
微信小程序如何实现点击图片放大功能
2020/01/21 Javascript
Vue实现简易购物车页面
2020/12/30 Vue.js
javascript实现固定侧边栏
2021/02/09 Javascript
用Python写冒泡排序代码
2016/04/12 Python
Python实现读取并保存文件的类
2017/05/11 Python
python主线程捕获子线程的方法
2018/06/17 Python
python实现周期方波信号频谱图
2018/07/21 Python
Python中的异常处理try/except/finally/raise用法分析
2019/02/28 Python
python 在sql语句中使用%s,%d,%f说明
2020/06/06 Python
Keras 在fit_generator训练方式中加入图像random_crop操作
2020/07/03 Python
解决pycharm修改代码后第一次运行不生效的问题
2021/02/06 Python
HTML5 Canvas实现放大镜效果示例
2020/03/25 HTML / CSS
美国潜水装备、水肺潜水和浮潜设备商店:Leisure Pro
2018/08/08 全球购物
巴黎卡诗加拿大官网:Kérastase加拿大
2018/11/12 全球购物
英国发展最快的在线超市之一:Click Marketplace
2021/02/15 全球购物
.NET里面什么时候需要调用垃圾回收
2015/06/01 面试题
三年大学生活自我鉴定
2014/01/21 职场文书
求职简历自我评价范例
2014/03/12 职场文书
《东方明珠》教学反思
2014/04/20 职场文书
家庭经济困难证明
2015/06/23 职场文书
党校团干班培训心得体会
2016/01/06 职场文书
新手开公司创业注意事项有哪些?
2019/07/29 职场文书
详解Laravel服务容器的优势
2021/05/29 PHP
springboot项目以jar包运行的操作方法
2021/06/30 Java/Android