# 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算法