Menu
Coddy logo textTech

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 メソッドは、オブジェクトの状態を必要としないユーティリティ関数や、クラスレベルのデータを管理する場合に役立ちます。オブジェクトをインスタンス化せずに機能を提供できます。

challenge icon

チャレンジ

簡単

オブジェクトをインスタンス化せずに、一意の識別子を作成するための静的メソッドとプロパティを使用した ID ジェネレーターシステムを構築しましょう。

コードを整理するために、2つのファイルを作成します。

  • IdGenerator.php:静的メンバーのみを使用して一意の ID の生成を管理する IdGenerator class を 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 method generate() を Create します。prefix を Change する static method setPrefix($newPrefix) と、$lastId の current value を Returns する static method getLastId() を 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番号を出力する

?>
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

オブジェクト指向プログラミングのすべてのレッスン

自分で練習してみよう: PHPオンラインコンパイラ