PHPオブジェクト指向実践

カウンター

静的メソッドにする

基本の仕組み構築の部分で、あれ?と思われたかもしれません。
初級編と比べてカウンターの処理呼び出しが違います。

初級編ではカウンタークラスをnewしてインスタンスを生成していたのに対して、基本の仕組み構築のところのサンプルコードではnewはせず、静的メソッドを直接呼び出しています。

初級編のほうを見ていただければ分かるとおり、カウンタークラスにはフィールドが一個もありません。この場合、メソッドをインスタンスメソッドとする必要はありません。静的メソッドにするのです。そのほうがインスタンス生成の手間が省けます。

こんなかんじです。

<?php

class Counter
{
    const DATA_FILE_NAME = '/count.dat';
            
    // カウンター値取得
    public static function get()
    {
        $cnt = 0;
        if (true == file_exists(DATA_ROOT . self::DATA_FILE_NAME)) {
            // データ保存ファイルからデータ取得
            $fp = fopen(DATA_ROOT . self::DATA_FILE_NAME, 'r');
            $data = trim(fgets($fp));
            fclose($fp);
            
            // データが数値ならカウンター値として取得
            if (true == is_numeric($data)) {
                $cnt = $data;
            }
        }
        return $cnt;
    }
    
    // カウンター加算処理
    public static function increment()
    {
        // 現在のカウント値を取得
        $cnt = self::get();
        // カウントを1増やす
        $cnt++;
        // データ保存ファイルに上書きする
        $fp = fopen(DATA_ROOT . self::DATA_FILE_NAME, 'w');
        fputs($fp, $cnt);
        fclose($fp);
    }    
}


?>

まあ、違いって本当に「static」が付いただけなんですけどね。
それで問題ないようなクラスならその方が楽なので。