PHP - 靜態屬性
你好,有志於成為程序員的各位!今天,我們將要深入探索 PHP 靜態屬性的精彩世界。如果你是編程新手,別擔心——我會用我在課堂上多年的耐心來引導你走過每一步。讓我們開始吧!
靜態屬性是什麼?
在我們進行代碼編寫之前,讓我們先了解什麼是靜態屬性。想像你在一個課堂(就像我的課堂一樣!),那裡有一塊所有人都能看到和書寫的白板。靜態屬性就像那塊白板一樣——它屬於類本身,而不屬於任何特定的學生(或者編程術語中的對象)。
靜態屬性的關鍵特徵:
- 它們在類的所有實例之間共享。
- 它們可以在不創建類的對象的情況下訪問。
- 它們使用
static
關鍵字聲明。
現在,讓我們看看這在實踐中是如何工作的!
靜態屬性的示例
讓我們創建一個名為 Counter
的簡單類來演示靜態屬性:
class Counter {
public static $count = 0;
public function increment() {
self::$count++;
}
public static function getCount() {
return self::$count;
}
}
讓我們分解一下:
- 我們聲明了一個靜態屬性
$count
並初始化為 0。 -
increment()
方法將計數加 1。 -
getCount()
方法返回當前計數。
現在,讓我們使用這個類:
echo Counter::$count; // 輸出:0
$counter1 = new Counter();
$counter1->increment();
echo Counter::$count; // 輸出:1
$counter2 = new Counter();
$counter2->increment();
echo Counter::$count; // 輸出:2
echo Counter::getCount(); // 輸出:2
這不是很棒嗎?無論我們創建多少個 Counter
對象,它們都共享同一個 $count
。就像我課堂上的所有學生共享一個白板計數器一樣!
"self" 關鍵字
你可能已經注意到我們在類中使用了 self::$count
。self
關鍵字就像說 "這個類" 一樣——它指的是當前類。它在處理靜態屬性和方法時特別有用。
讓我們擴展我們的 Counter
類來看更多 self
的用途:
class Counter {
public static $count = 0;
private static $secretCount = 100;
public function increment() {
self::$count++;
self::incrementSecretCount();
}
private static function incrementSecretCount() {
self::$secretCount++;
}
public static function getSecretCount() {
return self::$secretCount;
}
}
在這裡,我們添加了一個 $secretCount
,它是私有的(嘿嘿,這是個秘密!)。我們使用 self
來訪問類中的靜態屬性和方法。
"parent" 關鍵字
現在,讓我們來談談繼承和 parent
關鍵字。想像你正在向你的父母學習烹飪。你可能會使用他們的一些食譜(繼承的方法)但加入自己的創意。在 PHP 中,parent
讓你可以訪問父類的方法和屬性。
讓我們創建一個繼承自我們 Counter
的 SuperCounter
:
class SuperCounter extends Counter {
public function superIncrement() {
parent::increment();
parent::increment();
self::$count++; // 我們仍然可以使用 self 為了訪問繼承的靜態屬性
}
}
使用我們的新 SuperCounter
:
$superCounter = new SuperCounter();
$superCounter->superIncrement();
echo SuperCounter::$count; // 輸出:3
superIncrement()
方法調用父類的 increment()
兩次,然後再自增一次,總共增加 3。
靜態方法表
讓我們總結一下我們見過的與靜態相關的方法,放在一個方便的表中:
方法 | 描述 |
---|---|
self::$property |
在同一類中訪問靜態屬性 |
self::method() |
在同一類中調用靜態方法 |
ClassName::$property |
從類外部訪問靜態屬性 |
ClassName::method() |
從類外部調用靜態方法 |
parent::method() |
在子類中調用父類的方法 |
結論
好了,各位朋友!我們已經探索了 PHP 中的靜態屬性,從基本使用到繼承。記住,靜態屬性就像那個課堂白板一樣——被所有人共享,並且任何知道類名的人都可以訪問。
與編程中的任何工具一樣,要明智地使用靜態屬性。它們對於計數器、配置設定或任何應該在類的所有實例之間共享的數據來說非常好。但是過度使用它們會導致代碼更難以管理和測試。
繼續練習,不久你將能夠像專家一樣使用靜態屬性!並且記住,在編程中,正如在我的課堂上,沒有愚蠢的問題——只有學習的機會。快樂編程!
Credits: Image by storyset