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的cms
Dec 19 PHP
PHP中限制IP段访问、禁止IP提交表单的代码
Apr 23 PHP
JS与PHP向函数传递可变参数的区别实例代码
May 18 PHP
PHP静态调用非静态方法的应用分析
May 02 PHP
yii2.0之GridView自定义按钮和链接用法
Dec 15 PHP
fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
Sep 20 PHP
给WordPress的编辑后台添加提示框的代码实例分享
Dec 25 PHP
php支付宝APP支付功能
Jul 29 PHP
PHP实现八皇后算法
May 06 PHP
PHP实现的多进程控制demo示例
Jul 22 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
Apr 07 PHP
PHP与Web页面交互操作实例分析
Jun 02 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中数据库单例模式的实现代码分享
2014/08/21 PHP
php数组索引与键值操作技巧实例分析
2015/06/24 PHP
php生成Android客户端扫描可登录的二维码
2016/05/13 PHP
php中get_magic_quotes_gpc()函数说明
2017/02/06 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
零基础php编程好学吗
2019/10/11 PHP
laravel实现上传图片的两种方式小结
2019/10/12 PHP
jquery的颜色选择插件实例代码
2008/10/02 Javascript
JavaScript类和继承 constructor属性
2010/03/04 Javascript
使用javascript实现有效时间的控制,并显示将要过期的时间
2014/01/02 Javascript
js表格排序实例分析(支持int,float,date,string四种数据类型)
2015/05/06 Javascript
jQuery网页选项卡插件rTabs用法实例分析
2015/08/26 Javascript
动态加载js、css的简单实现代码
2016/05/26 Javascript
javascript中数组和字符串的方法对比
2016/07/20 Javascript
JavaScript 闭包详细介绍
2016/09/28 Javascript
localStorage的黑科技-js和css缓存机制
2017/02/06 Javascript
jQuery实现select下拉框获取当前选中文本、值、索引
2017/05/08 jQuery
深入理解JavaScript创建对象的多种方式以及优缺点
2017/06/01 Javascript
Vue的事件响应式进度条组件实例详解
2018/02/04 Javascript
微信小程序实现的一键复制功能示例
2019/04/24 Javascript
koa-router路由参数和前端路由的结合详解
2019/05/19 Javascript
详解javascript中var与ES6规范中let、const区别与用法
2020/01/11 Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
2020/03/31 Javascript
JavaScript中的全局属性与方法深入解析
2020/06/14 Javascript
[19:15]DK战队纪录片
2014/09/02 DOTA
[03:16]DOTA2完美大师赛主赛事首日集锦
2017/11/23 DOTA
python 实现图像快速替换某种颜色
2020/06/04 Python
Python selenium模块实现定位过程解析
2020/07/09 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
纯CSS实现预加载动画效果
2017/09/06 HTML / CSS
纽约JewelryAffairs珠宝店:精细金银时尚首饰
2017/02/05 全球购物
中文系学生自荐信范文
2013/11/13 职场文书
文明礼仪伴我行演讲稿
2014/05/12 职场文书
工作粗心大意检讨书
2014/09/18 职场文书
python cv2图像质量压缩的算法示例
2021/06/04 Python
python中mongodb包操作数据库
2022/04/19 Python