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