您好,登錄后才能下訂單哦!
一、靜態(tài)變量
<?php
/**
聲明一個(gè)名為test的函數(shù),測(cè)試在函數(shù)內(nèi)部聲明的靜態(tài)變量的使用
*/
function test(){
static $a=0;
echo $a;
$a++;
}
test(); //第一次運(yùn)行,輸出0
test(); //第二次運(yùn)行,輸出1
test(); //第三次運(yùn)行,輸出2
test(); //第四次運(yùn)行,輸出3
?>
在上例中,將函數(shù)中的局部變量$a,使用static關(guān)鍵詞聲明為靜態(tài)變量,并賦初值為0.函數(shù)在第一次執(zhí)行時(shí),靜態(tài)變量$a經(jīng)運(yùn)算后,從初值0變?yōu)?.當(dāng)函數(shù)第一次執(zhí)行完畢后,靜態(tài)變量$a并沒有被釋放,而是將結(jié)果保存在靜態(tài)內(nèi)存中。第二次執(zhí)行時(shí),$a從內(nèi)存中獲取上一次計(jì)算的結(jié)果1,繼續(xù)計(jì)算,并將結(jié)果2存于靜態(tài)內(nèi)存空間中。以后每次函數(shù)執(zhí)行時(shí),靜態(tài)變量將從自己的靜態(tài)內(nèi)存空間中獲取前次的儲(chǔ)存結(jié)果,并以此為初值進(jìn)行計(jì)算。
二、static關(guān)鍵字的使用
類中的靜態(tài)成員是不需要對(duì)象而是使用類名來(lái)直接訪問的,格式如下所示:
類名::靜態(tài)成員屬性名; //在類的外部和成員方法中都可以使用這種方式訪問靜態(tài)成員屬 性
類名::靜態(tài)成員方法(); //在類的外部和成員方法中都可以使用這種方式訪問靜態(tài)成員方 法
在類中聲明的成員方法中,也可以使用關(guān)鍵字“self”來(lái)訪問其他靜態(tài)成員。因?yàn)殪o態(tài)成員是屬于類的,而不屬于任何對(duì)象,所以不能用$this來(lái)引用它,而在PHP中給我們提供的self關(guān)鍵字,就是在類的成員方法中用來(lái)代表本類的關(guān)鍵字。格式如下所示:
self::靜態(tài)成員屬性名; //在類的成員方法中使用這種方式訪問本類中的靜態(tài)成員屬性
self::靜態(tài)成員方法名(); //在類的成員方法中使用這種方式訪問本類中的靜態(tài)成員方法
<?php
class MyClass{
static $count; //在類中聲明一個(gè)靜態(tài)成員屬性count,用于統(tǒng)計(jì)對(duì)象被創(chuàng)建的次數(shù)
function __construct(){ //每次創(chuàng)建一個(gè)對(duì)象就會(huì)自動(dòng)調(diào)用一次這個(gè)構(gòu)造方法
self::$count++; //使用self訪問靜態(tài)成員count,使其自增1
}
static function getCount(){ //聲明一個(gè)靜態(tài)方法,在類外面直接使用類名就可以調(diào)用
return self::$count; //在方法中使用self訪問靜態(tài)成員并返回
}
}
MyClass::$count=0; //在類外面使用類名訪問類中的靜態(tài)成員,為其初始化賦值0
$myc1=new MyClass(); //通過myclass類創(chuàng)建第一個(gè)對(duì)象,在構(gòu)造方法中將count累加1
$myc2=new MyClass(); //通過myclass類創(chuàng)建第二個(gè)對(duì)象,在構(gòu)造方法中又將count累加1
$myc3=new MyClass(); //通過myclass類創(chuàng)建第三個(gè)對(duì)象,在構(gòu)造方法中再次將count累加1
echo MyClass::getCount(); //在類外面使用類名訪問類中的靜態(tài)成員方法,獲取靜態(tài)屬性的值3
echo "<br/>";
echo $myc3->getCount(); //通過對(duì)象也可以訪問類中的靜態(tài)成員方法,獲取靜態(tài)屬性的值3
?>
代碼運(yùn)行結(jié)果為3 3
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。