PHP 中的靜態變數

Subodh Poudel 2023年1月30日 2022年7月12日
  1. PHP 中的靜態變數
  2. 在 PHP 中使用 self 關鍵字訪問類中的靜態變數
  3. PHP 中使用類名訪問類外的靜態變數
  4. 訪問靜態方法中的靜態變數
PHP 中的靜態變數

本文將介紹 PHP 靜態變數,解釋它們的特性,並演示在物件導向的上下文中訪問靜態變數的各種方法。

PHP 中的靜態變數

程式中的變數用於儲存以後可以在程式中使用的資料或值。變數可以儲存字元、數值、字串、記憶體地址等。

在 PHP 中,我們使用 $ 美元符號後跟變數名稱來宣告或儲存值。

例子:

$name = "John Doe";
$marks = 90;

同樣,靜態變數是其範圍不結束於函式之外的變數。非靜態變數的作用域在函式退出後被銷燬。

我們可以使用 static 關鍵字宣告一個靜態變數。

例子:

static $name = "John Doe";
static $marks = 90;`

讓我們通過下面的演示來看看靜態變數的屬性。

程式碼示例:

function total_marks () {
    static $marks = 90;
    $marks ++;
    print $marks;
    print "<br />";
}
total_marks();
total_marks();
total_marks();

輸出:

91
92
93

上面的程式碼顯示靜態變數即使在函式結束後仍保留其值。對函式 total_marks() 有三種不同的呼叫,但即使在函式退出後 $marks 的值也不會被破壞。

在進行第二次和第三次函式呼叫時,該值不會重置為 90。隨著先前的值被保留,它會繼續增加。

讓我們將上面的示例應用於非靜態變數。

示例程式碼:

function total_marks () {
    $marks = 90;
    $marks ++;
    print $marks;
    print "<br />";
}
total_marks();
total_marks();
total_marks();

輸出:

91
91
91

每次進行函式呼叫時,$marks 變數的值都會重置為 90。它表明非靜態變數不保留其先前的值。

在 PHP 中使用 self 關鍵字訪問類中的靜態變數

我們可以使用 self 關鍵字來訪問類中的靜態變數。雙冒號 :: 用在 self 關鍵字之後,靜態變數緊隨其後。

this 關鍵字不適用於靜態變數,因為靜態變數不屬於物件。

例如,在一個類中,Student 建立一個靜態變數 $name 並分配一個值 John Doe。在函式內部,who() 使用帶有雙冒號的 self 關鍵字來訪問靜態變數 $name,最後,使用類的物件呼叫該函式。

示例程式碼:

class Student {
    public static $name = "John Doe";
    public function who() {
    echo self::$name;
    }
}
$obj = new Student;
$obj->who();

輸出:

John Doe

PHP 中使用類名訪問類外的靜態變數

可以直接訪問靜態變數,而無需建立類的例項。要訪問類外部的靜態變數,我們可以編寫類的名稱,後跟雙冒號(::),後跟靜態變數的名稱。

例如,在一個類中,Student 像第一個方法一樣建立一個靜態變數。接下來,在類外寫入 Student:$name 以訪問靜態變數。

示例程式碼:

class Student {
    public static $name = "John Doe";
}
echo Student::$name;

輸出:

John Doe

靜態變數 $name 在類外部使用類名訪問。

訪問靜態方法中的靜態變數

在第一個示例中,我們瞭解瞭如何訪問類中的靜態變數。在那裡,我們訪問了非靜態方法內部的靜態變數。

本節將把靜態變數放在靜態方法中並對其進行訪問。我們可以在函式前寫 static 關鍵字來建立靜態方法,在不建立類例項的情況下訪問靜態函式,並使用類名呼叫靜態方法。

示例程式碼:

class Student {
    public static $name = "John Doe";
    public static function who() {
    echo self::$name;
    }
}
Student::who();

輸出:

John Doe

在這裡,我們使用::運算子訪問了類 Student 的靜態方法 who()。我們使用 self 關鍵字來訪問方法內的靜態變數。

Subodh Poudel avatar Subodh Poudel avatar

Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.

LinkedIn