静的プロパティとメソッド
staticメンバーを使い、インスタンスなしで呼び出すタイミングを理解します
「静的プロパティとメソッド」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。
はじめに:静的プロパティとメソッド
静的メンバーは、個々のインスタンスではなくクラス自体に属します。クラスの外部からはClassName::memberで、クラスの内部からはself::でアクセスします。静的メンバーはすべてのインスタンス間で共有されます。
基本概念
静的プロパティとメソッドの重要な概念:
staticキーワードを使って宣言します::(スコープ解決演算子)でアクセスします- クラス内部では
self::、外部からはClassName::を使用します static::で遅延静的束縛を行います
静的プロパティ
例:
<?php
class AppConfig {
private static array $settings = [];
public static function set(string $key, mixed $val): void {
self::$settings[$key] = $val;
}
public static function get(string $key, mixed $default = null): mixed {
return self::$settings[$key] ?? $default;
}
}
AppConfig::set('debug', true);
echo AppConfig::get('debug') ? 'debug on' : 'debug off';静的メソッド
続き:
<?php
class MathHelper {
public static function clamp(float $v, float $min, float $max): float {
return max($min, min($max, $v));
}
public static function lerp(float $a, float $b, float $t): float {
return $a + ($b - $a) * $t;
}
}
echo MathHelper::clamp(150, 0, 100); // 100
echo MathHelper::lerp(0, 100, 0.5); // 50シングルトンパターン
練習:
<?php
class Database {
private static ?Database $instance = null;
private function __construct() {
echo 'Connected to DB';
}
public static function getInstance(): self {
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
}
$db1 = Database::getInstance(); // 'Connected to DB'
$db2 = Database::getInstance(); // no output — same instance
echo ($db1 === $db2) ? 'same' : 'different'; // same静的カウンター
さらに詳しく:
<?php
class EventEmitter {
private static int $instanceCount = 0;
public function __construct() {
self::$instanceCount++;
}
public static function count(): int {
return self::$instanceCount;
}
}
new EventEmitter();
new EventEmitter();
new EventEmitter();
echo EventEmitter::count(); // 3遅延静的束縛
応用:
<?php
class ParentClass {
public static function create(): static {
return new static(); // resolves to calling subclass
}
public function getClass(): string {
return static::class; // late static binding
}
}
class ChildClass extends ParentClass {}
$obj = ChildClass::create();
echo $obj->getClass(); // ChildClass静的ファクトリ
実践的なパターン:
<?php
class Response {
private function __construct(
private int $status,
private mixed $body
) {}
public static function ok(mixed $data): self {
return new self(200, $data);
}
public static function notFound(): self {
return new self(404, ['error' => 'Not Found']);
}
public function toJson(): string {
return json_encode(['status' => $this->status, 'body' => $this->body]);
}
}
echo Response::ok(['users' => []])->toJson();静的メンバーとインスタンスメンバーのトレードオフ
ベストプラクティス:
<?php
// Static: no object needed, but harder to test/mock
class Validator {
public static function isEmail(string $s): bool {
return (bool) filter_var($s, FILTER_VALIDATE_EMAIL);
}
}
// Instance: injectable dependency, testable
class ValidatorService {
public function isEmail(string $s): bool {
return (bool) filter_var($s, FILTER_VALIDATE_EMAIL);
}
}
// Prefer instance classes in larger applications実践的なパターン
静的プロパティとメソッドを使った実践的なパターンに、ここまでの内容をまとめて適用します。
よくある落とし穴
静的プロパティとメソッドでは、次のようなよくある間違いを避けてください:
- 静的メンバーはすべてのインスタンス間で共有されます
- 継承されるクラスでは、self::よりも遅延静的束縛(static::)を優先します
- シングルトンは一般的なパターンですが、過剰に使用されることもあります
- 静的メソッドは単体テストでモック化することが難しくなります
クイックチェック
継承を考慮した遅延静的束縛で、クラス内部の静的プロパティにアクセスするキーワードは何ですか?
復習:静的プロパティとメソッド
静的プロパティとメソッドについて学習しました。覚えておくべき重要な点は次のとおりです:
- 静的メンバーはすべてのインスタンス間で共有されます
- 継承されるクラスでは、self::よりも遅延静的束縛(static::)を優先します
- シングルトンは一般的なパターンですが、過剰に使用されることもあります
- 静的メソッドは単体テストでモック化することが難しくなります
よくある質問
「静的プロパティとメソッド」レッスンは無料ですか?
はい。「静的プロパティとメソッド」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。
「静的プロパティとメソッド」で何を学びますか?
staticメンバーを使い、インスタンスなしで呼び出すタイミングを理解します ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
PHP Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「静的プロパティとメソッド」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPHP Academyレッスンでコードを書いて実行できますか?
はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- クラス、プロパティ、メソッド
- コンストラクタとデストラクタ
- 静的プロパティとメソッド
- マジックメソッドの概要