# PHP变量的生命周期
* * * * *
变量不仅有其特定的作用范围,还有其存活的周期--生命周期。变量的生命周期指的是变量可被使用的一个时间段,在这个时间段内变量是有效的,一旦超出这个时间段变量就会失效,我们就不能够再访问到该变量的值了。
PHP对变量的生命周期有如下规定。
1. 局部变量的生命周期为其所在函数被调用的整个过程。当局部变量所在的函数结束时,局部变量的生命周期也随之结束。
2. 全局变量的生命周期为其所在的".php"脚本文件被调用的整个过程。当全局变量所在的脚本文件结束调用时,则全局变量的生命周期结束。
有的时候某个自定义函数结束后,我们希望该函数内的变量仍然存在,这时就需要将这个变量声明为静态变量。将一个变量声明为静态变量的方法为,在变量前面加"static"关键字。
~~~
function test()
{
static $a = 0; //定义一个静态变量a并赋初始值为0
echo $a . "<br>"; //输出变量a的值
$a = $a + 1;
//将变量a的值加1再次赋给变量a
}
test(); //输出 0
test(); //输出 1
test(); //输出 2
echo $a; //$a,不在作用域下,不输出
~~~
从上面得到的结果可以看出,每次调用函数test()的时候,变量a的值都会增加1。也就是说,每次调用函数结束以后,变量a都仍然存在。再次调用函数test()时,变量a将会使用上一次调用该函数后得到的值。同时从上面的例子我们也可以得出这样的结论,**静态变量的作用范围与局部变量相同,但是生命周期与全局变量相同。**
我们可以这样理解静态变量。
只有函数首次被调用时,才取函数体内静态变量的初始值。以后再次调用该函数时,静态变量将取上次调用这个函数后得到的值。
在为静态变量赋初值的时候,不可以将一个表达式赋给该静态变量。
所有的全局变量都是静态变量,而局部变量只有定义时加上类型修饰符static,才为局部静态变量。
资料来源:
http://www.cnblogs.com/mysic/p/4706210.html
- 前言
- 函数参考
- Socket 函数
- socket_accept
- socket_bind
- socket_clear_error
- socket_close
- socket_connect
- socket_create_listen
- socket_create_pair
- socket_create
- socket_getpeername
- socket_getsockname
- socket_last_error
- socket_listen
- socket_read
- socket_recv
- socket_select
- socket_send
- socket_set_block
- socket_set_nonblock
- SplQueue
- 魔术方法
- 魔术常量
- 杂项
- backlog的用处
- new self()和new static()的区别
- PHP变量的生命周期
- PHP抽象类
- 对象接口
- PHP中的常用关键字
- 常量
- 内存泄露
- global 与 $GLOBAL
- 简单说明CGI和动态请求是什么
- 设计模式
- 单例模式
- 工厂模式
- 适配器模式
- 策略模式
- 观察者模式
- 控制反转IoC简介
- session
- use_trans_sid
- auto_start
- session_id
- cookie_secure
- 面试
- 数据库相关
- 语句相关
- 索引相关
- 字段相关
- PHP相关
- 字符串相关
- 函数相关
- 运算符优先级相关
- 错误相关
- redis相关
- 10个常见的Redis面试"刁难"问题
- mysql
- MySQL中的锁
- MySQL存储引擎MyISAM 和 InnoDB的区别
- MySQL半同步复制
- explain 命令详解
- 索引
- 数据库事务
- MySQL和B树的那些事
- git
- github----向开源框架提交pr的过程
- 推荐博客
- linux
- 命令
- free
- 高并发
- 抢购/秒杀功能
- 算法
- 一致性Hash算法