Staticメソッドとプロパティ
CoddyのPHPジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 17/91。
プロパティを static にできるのと同じように、method も個々のオブジェクトではなく class 自体に属するようにできます。static method は、最初にインスタンスを作成する必要なく、class を直接呼び出します。
staticキーワードを使用して静的メソッドを宣言し、クラス名と::演算子を使って呼び出します。
<?php
class MathHelper {
public static function add($a, $b) {
return $a + $b;
}
public static function multiply($a, $b) {
return $a * $b;
}
}
echo MathHelper::add(5, 3) . "\n";
echo MathHelper::multiply(4, 2);
出力:
8
8静的メソッドは静的プロパティと相性がよく機能します。共有クラスデータを管理するために静的メソッドを使用するのは、一般的なパターンです。
<?php
class Counter {
private static $count = 0;
public static function increment() {
self::$count++;
}
public static function getCount() {
return self::$count;
}
}
Counter::increment();
Counter::increment();
echo Counter::getCount();
出力:
2静的メソッドはオブジェクトのインスタンスが存在しないため、$thisを使用できないことに注意してください。self::を使用して、静的プロパティと他の静的メソッドにのみアクセスできます。
重要なポイント: static メソッドは、オブジェクトの状態を必要としないユーティリティ関数や、クラスレベルのデータを管理する場合に役立ちます。オブジェクトをインスタンス化せずに機能を提供できます。
チャレンジ
簡単オブジェクトをインスタンス化せずに、一意の識別子を作成するための静的メソッドとプロパティを使用した ID ジェネレーターシステムを構築しましょう。
コードを整理するために、2つのファイルを作成します。
IdGenerator.php:静的メンバーのみを使用して一意の ID の生成を管理するIdGeneratorclass を Define します。class には、0から始まる private static property$lastIdと、"ID"に設定された private static property$prefixを用意します。last ID を Increments し、prefix と new ID を combining した formatted string("ID1"、"ID2"など)を Returns する static methodgenerate()を Create します。prefix を Change する static methodsetPrefix($newPrefix)と、$lastIdの current value を Returns する static methodgetLastId()を add します。main.php:IdGenerator class の file を Include します。default prefix を使用して2つの ID を generate し、それぞれを own line に Print します。次に、static method を使用して prefix を"USER"に Change し、さらに2つの ID を generate して、それぞれを Print します。最後に、appropriate static method を呼び出して last ID number を Print します。
static methods は ClassName::methodName() を使用して class 上で直接呼び出し、class 内では self::$propertyName で static properties にアクセスすることを Remember してください。object instance がないため、static methods では $this を使用できません。
出力には、異なる prefix による ID の progression が示され、複数の method calls にわたって static properties がその values を維持する仕組みが表れるようにしてください。
自分で試してみよう
<?php
// IdGenerator クラスファイルをインクルードする
require_once 'IdGenerator.php';
// TODO: デフォルトのプレフィックスを使用して2つのIDを生成し、それぞれを1行ずつ出力する
// TODO: 静的メソッドを使用してプレフィックスを "USER" に変更する
// TODO: さらに2つのIDを生成し、それぞれを1行ずつ出力する
// TODO: 適切な静的メソッドを使用して最後のID番号を出力する
?>このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
3クラスプロパティ
インスタンスプロパティとStaticプロパティクラスの定数StaticメソッドとプロパティPrivateプロパティとProtectedプロパティReadonlyプロパティ(PHP 8.1)復習 - 銀行口座マネージャー自分で練習してみよう: PHPオンラインコンパイラ