インスタンスプロパティとStaticプロパティ
CoddyのPHPジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 15/91。
クラスにプロパティを作成するときは、それが個々のオブジェクトに属するのか、クラス自体に属するのかを決める必要があります。この違いが、instance プロパティと static プロパティの違いです。
インスタンスプロパティがデフォルトです。各オブジェクトはプロパティの独自のコピーを持ち、1つのオブジェクトで変更しても他のオブジェクトには影響しません。
<?php
class User {
public $name;
public function __construct($name) {
$this->name = $name;
}
}
$alice = new User("Alice");
$bob = new User("Bob");
echo $alice->name . "\n";
echo $bob->name . "\n";
出力:
Alice
Bob
静的プロパティはクラスに属し、特定のオブジェクトには属しません。staticキーワードを使って宣言し、->を使うオブジェクトではなく、::を使ってクラス名からアクセスします。
<?php
class User {
public static $count = 0;
public $name;
public function __construct($name) {
$this->name = $name;
self::$count++;
}
}
$alice = new User("Alice");
$bob = new User("Bob");
echo User::$count;
出力:
2
$count がすべてのインスタンスで共有されていることに注目してください。新しい User を作成するたびに、同じ $count 変数が Increments します。クラス内では、静的プロパティを参照するために self::$count を使用します。
重要なポイント: each オブジェクトがそれぞれ独自の値を必要とする場合は、インスタンスプロパティを使用します。class の all オブジェクト間でデータを共有する必要がある場合(インスタンス数のカウントや設定の保存など)は、static プロパティを使用します。
チャレンジ
簡単各 visitor に固有の instance properties と、すべての visitor で共有される static properties の違いを示す visitor 追跡システムを構築しましょう。
コードを整理するために、2つのファイルを作成します。
Visitor.php: 個々の visitor を追跡し、visitor の合計数を継続的にカウントするVisitorclass を Define します。各 visitor は独自の$nameproperty(instance property)を持ち、$totalVisitorsproperty はすべての instance 間で共有される static property とします。constructor は名前を Accepts し、それを Sets して、visitor の合計数を Increments します。"[name] is visitor #[totalVisitors]"を returns するgetInfo()method を追加します。main.php: Visitor class のファイルを Include し、"Alice"、"Bob"、"Charlie"という names の3人の visitor を(その order で)Create します。3人全員を作成した後、各 visitor に対してgetInfo()を呼び出した result を(それぞれ独自の line に)Print し、その後、Visitor::$totalVisitorsを使用して class から static property に直接アクセスし、visitor の合計数を Print します。
class の内部では self::$propertyName を使用して static properties にアクセスし、class の外部からは ClassName::$propertyName を使用することを Remember してください。Instance properties には、通常どおり $this->propertyName でアクセスします。
出力には各 visitor とその assigned number が表示され、最後の line に最終的な合計数が表示されます。
必要な出力形式:
自分で試してみよう
<?php
// Visitorクラスをインクルードする
require_once 'Visitor.php';
// TODO: 名前が "Alice"、"Bob"、"Charlie" の3人のビジターを作成する(その順番で)
// TODO: 各ビジターの getInfo() の結果を出力する(それぞれを1行ずつ)
// TODO: Visitor::$totalVisitors を使用して総ビジター数を出力する
?>このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
3クラスプロパティ
インスタンスプロパティとStaticプロパティクラスの定数StaticメソッドとプロパティPrivateプロパティとProtectedプロパティReadonlyプロパティ(PHP 8.1)復習 - 銀行口座マネージャー自分で練習してみよう: PHPオンラインコンパイラ