PHP的變量類型和作用域詳解
PHP中變量的作用域可以分為:超全局(全局變量的特殊類型,在局部范圍里可直接使用),全局,局部,靜態(tài)(是局部變量的特殊類型)
在PHP中,全局變量實(shí)際上是靜態(tài)全局變量,如果不用unset顯式的釋放,那么等腳本運(yùn)行結(jié)束全局變量才會(huì)被釋放掉
局部靜態(tài)變量細(xì)分可以是 局部靜態(tài)函數(shù)變量(函數(shù)中聲明的static變量),局部靜態(tài)成員變量(類中聲明的 static 屬性,被所有類實(shí)例共享)
局部靜態(tài)變量只有腳本運(yùn)行結(jié)束才會(huì)被自動(dòng)釋放
超全局變量:在一個(gè)腳本的任何作用域里都可以被訪問,這些都是PHP內(nèi)置的
$GLOBALS
$_SERVER
$_GET
$_POST
$_FILES
$_SESSION(持久化存儲(chǔ))
$_COOKIE(持久化存儲(chǔ))
$_REQUEST
$_ENV
全局變量:聲明的變量不在class,function,if等語言結(jié)構(gòu)內(nèi)部,如果要在class,function,if等語言內(nèi)部使用,需要用關(guān)鍵詞global或者超全局變量$GLOBALS
靜態(tài)變量: 在function中使用關(guān)鍵詞static聲明的變量,靜態(tài)變量的值保留直至腳本結(jié)束
局部變量:在class,function,if/while/for等結(jié)構(gòu)語句內(nèi)部聲明的變量
1.global關(guān)鍵詞和$GLOBALS實(shí)例
$a = 0;
function foo()
{
global $a;
echo $a;
}
function foo2()
{
echo $GLOBALS['a'];
}
2.static 變量和普通局部變量區(qū)別實(shí)例
function foo1()
{
$var = 0;
$var++;
return $var;
}
echo foo1();
echo foo1();
//輸出都是1
function foo ()
{
static $var = 0;
$var++;
return var;
}
echo foo();
echo foo();
//第一次輸出1 第二次2
3.static 關(guān)鍵詞還可以聲明靜態(tài)屬性和靜態(tài)方法
靜態(tài)屬性只能被類調(diào)用,而不能被類實(shí)例調(diào)用
靜態(tài)方法里不能使用$this,只能用self訪問類的靜態(tài)屬性
另外理解static變量的一段代碼:
<?php
class t
{
static $v = 10;
public function a()
{
static $var = 10;
$var++;
echo $var . "<br>\n";
}
public static function aa()
{
self::$v++;
echo self::$v . "<br>\n";
}
}
$o1 = new t();
$o1->a();//輸出11
$o2 = new t();
$o2->a();//輸出12
t::aa();//輸出11
$o1->aa();//輸出12
$o2->aa();//輸出13
從上面的代碼中,可知如果一個(gè)類成員方法中有靜態(tài)變量,即使是不同的類實(shí)例,他們也會(huì)共享這個(gè)靜態(tài)變量,盡管這個(gè)靜態(tài)變量不是類靜態(tài)成員變量,這點(diǎn)容易讓人迷惑。
相關(guān)文章
PHP實(shí)現(xiàn)的二分查找算法實(shí)例分析
這篇文章主要介紹了PHP實(shí)現(xiàn)的二分查找算法,結(jié)合實(shí)例形式分析了二分查找算法的原理與循環(huán)、遞歸等實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-12-12
微信公眾平臺(tái)消息接口校驗(yàn)與消息接口響應(yīng)實(shí)例
這篇文章主要介紹了微信公眾平臺(tái)消息接口校驗(yàn)與消息接口響應(yīng)的方法,實(shí)例分析了微信公眾平臺(tái)開發(fā)的具體步驟及wechatCallbackapiTest等類的用法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12
PHP mkdir創(chuàng)建文件夾實(shí)現(xiàn)方法解析
這篇文章主要介紹了PHP mkdir創(chuàng)建文件夾實(shí)現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
PHP定時(shí)執(zhí)行計(jì)劃任務(wù)的多種方法小結(jié)
PHP不支持多線程,有時(shí)候處理問題不是那么爽,今天談?wù)撘幌翽HP定時(shí)執(zhí)行的方法2011-12-12
KindEditor在php環(huán)境下上傳圖片功能集成的方法示例
這篇文章主要介紹了PHP環(huán)境下如何實(shí)現(xiàn)使用KindEditor編輯器上傳圖片,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07

