PHP - 靜態屬性

你好,有志於成為程序員的各位!今天,我們將要深入探索 PHP 靜態屬性的精彩世界。如果你是編程新手,別擔心——我會用我在課堂上多年的耐心來引導你走過每一步。讓我們開始吧!

PHP - Static Properties

靜態屬性是什麼?

在我們進行代碼編寫之前,讓我們先了解什麼是靜態屬性。想像你在一個課堂(就像我的課堂一樣!),那裡有一塊所有人都能看到和書寫的白板。靜態屬性就像那塊白板一樣——它屬於類本身,而不屬於任何特定的學生(或者編程術語中的對象)。

靜態屬性的關鍵特徵:

  1. 它們在類的所有實例之間共享。
  2. 它們可以在不創建類的對象的情況下訪問。
  3. 它們使用 static 關鍵字聲明。

現在,讓我們看看這在實踐中是如何工作的!

靜態屬性的示例

讓我們創建一個名為 Counter 的簡單類來演示靜態屬性:

class Counter {
public static $count = 0;

public function increment() {
self::$count++;
}

public static function getCount() {
return self::$count;
}
}

讓我們分解一下:

  1. 我們聲明了一個靜態屬性 $count 並初始化為 0。
  2. increment() 方法將計數加 1。
  3. 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::$countself 關鍵字就像說 "這個類" 一樣——它指的是當前類。它在處理靜態屬性和方法時特別有用。

讓我們擴展我們的 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 讓你可以訪問父類的方法和屬性。

讓我們創建一個繼承自我們 CounterSuperCounter

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