溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

靜態(tài)變量(static)

發(fā)布時(shí)間:2020-07-20 03:38:39 來(lái)源:網(wǎng)絡(luò) 閱讀:420 作者:yuxin1234567890 欄目:網(wǎng)絡(luò)安全

一、靜態(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

向AI問一下細(xì)節(jié)

免責(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)容。

AI