在 PHP 中,靜態成員(方法和屬性)屬於類別本身,而不屬於單一物件。這意味著您無需創建類別的實例即可存取它們。當您想要跨多個物件共享資料或功能時,靜態成員非常有用。 PHP 提供了三個關鍵字來存取靜態方法和屬性:self::、parent:: 和 static::。每種方法的工作方式都不同,尤其是在使用繼承時。在本文中,我們將解釋這些關鍵字的工作原理,並透過範例展示它們的差異。
全域變數:靜態屬性可以用作類別中的全域變量,可供所有實例存取。
實用方法:靜態方法可以提供獨立於各個物件的實用函數。
類別級常數:靜態屬性可用來定義類別級常數。
單例模式:靜態方法和屬性對於實作單例模式至關重要。
要呼叫靜態方法,請使用 :: 運算符,後面接著方法名稱。這是一個例子:
class MyClass { public static function greet() { echo "Hello, world!"; } } MyClass::greet(); // Output: Hello, world!
要存取靜態屬性,也可以使用 :: 運算符,後面接著屬性名稱。這是一個例子:
class MyClass { public static $count = 0; public static function incrementCount() { self::$count++; } } MyClass::incrementCount(); echo MyClass::$count; // Output: 1
自己::
self::關鍵字指的是寫程式的類別。它不考慮繼承,這意味著如果子類別重寫靜態方法或屬性, self:: 仍將引用定義程式碼的父類別。
家長::
Parent:: 關鍵字用於從直接父類別呼叫靜態方法或屬性。它繞過子類別中任何重寫的方法,確保使用父類別的方法或屬性。
靜態::
static:: 關鍵字的工作方式與 self:: 類似,但它負責後期靜態綁定。這意味著,如果在子類別中重寫靜態方法或屬性,static:: 將引用最底層派生類別中的方法或屬性,即使它是從父類別呼叫的。
讓我們看看這些關鍵字在具有繼承的 PHP 程式中的表現如何。
class A { public static function sayHello() { return "Hello from A"; } public static function test() { return self::sayHello(); } } class B extends A { public static function sayHello() { return "Hello from B"; } } echo B::test(); // Output: "Hello from A"
在此範例中,A 類別中的 self:: 引用 A 中的 sayHello() 方法。即使 B 類別重寫了該方法,self:: 也會呼叫父類別方法,產生輸出「Hello from A」。
class A { public static function sayHello() { return "Hello from A"; } } class B extends A { public static function sayHello() { return parent::sayHello() . " and B"; } } echo B::sayHello(); // Output: "Hello from A and B"
在此範例中,類別 B 呼叫parent::sayHello() 以包含來自父類別 A 的訊息,然後附加自己的訊息。輸出是“Hello from A and B.”
class A { public static function sayHello() { return "Hello from A"; } public static function test() { return static::sayHello(); } } class B extends A { public static function sayHello() { return "Hello from B"; } } echo B::test(); // Output: "Hello from B"
這裡,A類中的static::指的是最底層派生類B中的方法sayHello(),這是因為static::允許後期靜態綁定,而調用了B類中的方法,導致“ B 的你好。
主要差異self:::指的是使用它的類,忽略繼承。當您不希望子類別中的方法影響正在呼叫的方法時,這非常有用。
parent:::專門從父類別呼叫方法或屬性,即使它們在子類別中被重寫。當從父類別擴充功能但仍需要存取原始方法時,它非常有用。
static:::啟用後期靜態綁定,這意味著它在運行時引用最派生類別中的方法或屬性,即使是從父類別呼叫也是如此。對於您希望行為根據呼叫類別進行調整的情況非常有用。
以上是了解 PHP 中的靜態成員的詳細內容。更多資訊請關注PHP中文網其他相關文章!