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 を共有します。まるで教室の生徒全員が1つのホワイトボードカウントを共有しているようなものです!

「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()」を2回呼び、さらに1回インクリメントするため、合計で3回インクリメントされます。

静的メソッドの表

見てきた静的関連メソッドを便利な表にまとめます:

メソッド 説明
self::$property 同じクラス内で静的プロパティにアクセス
self::method() 同じクラス内で静的メソッドを呼び出し
ClassName::$property クラスの外から静的プロパティにアクセス
ClassName::method() クラスの外から静的メソッドを呼び出し
parent::method() 子クラス内で親クラスのメソッドを呼び出し

結論

そして、皆さん!PHPの静的プロパティの世界を探求しました。静的プロパティは、クラスのすべてのインスタンスで共有され、カウント、設定設定、またはクラスのすべてのインスタンス間で共有されるべきデータに非常に適しています。しかし、過度に使用すると、コードが管理しにくくなり、テストが難しくなる可能性があります。

続けて練習し、すぐにプロのように静的プロパティを使えるようになるでしょう!そして、プログラミング也好、私の教室也好、質問はすべて馬鹿げたものではなく、学ぶ機会なのだことを忘れないでください。ハッピーコーディング!

Credits: Image by storyset