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()
への 3つの異なる呼び出しがありますが、$marks
の値は関数が終了した後でも破棄されません。
2 番目と 3 番目の関数呼び出しが行われたときに、値は 90
にリセットされません。以前の値が保持されるため、増分を続けます。
上記の例を非静的変数に適用してみましょう。
サンプルコード:
function total_marks () {
$marks = 90;
$marks ++;
print $marks;
print "<br />";
}
total_marks();
total_marks();
total_marks();
出力:
91
91
91
$marks
変数の値は、関数呼び出しが行われるたびに 90
にリセットされます。これは、非静的変数が以前の値を保持していないことを示しています。
self
キーワードを使用して、PHP のクラス内の静的変数にアクセスする
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 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