このサイトにはプロモーションが含まれます

【今日の覚書】static メソッドは適切に

static おじさんになりかけたので、備忘録として学習の記録を残します。

I`m PHPer!!!!!

便利なstatic

PHPの static メソッドは、インスタンスを生成せずにクラスから直接呼び出せるメソッドです。

やんやん

プログラマーとしてLEMP環境に主に生息しており、DevOps 的な立ち回りをしながらご飯を食べている当ブログの管理人のやんやんと申します。
最近はTmux使うのを辞めました。

 

使うべきタイミング

PHP

状態を持たない処理

インスタンスの状態に依存しない、独立した処理を行う場合に適しています。例えば、ユーティリティ関数やヘルパー関数などがこれに該当します。

class MathHelper {
  public static function add($a, $b) {
    return $a + $b;
  }
}

echo MathHelper::add(3, 4); // 出力: 7

 

ファクトリーメソッド

クラスのインスタンスを生成するメソッド(ファクトリーメソッド)として使用されることがあります。

この場合、`new`キーワードを隠蔽して、インスタンス化の過程を制御できます。

class User {
  public $name;

  private function __construct($name) {
    $this->name = $name;
  }

  public static function create($name) {
    return new self($name);
  }
}

$user = User::create('John Doe');

 

あまり使いたくないね。。。

 

シングルトンパターン

特定のクラスのインスタンスが一つだけ存在することを保証するシングルトンパターンの実装に利用されます。

<?php

class Singleton
{
    private static $instance;

    private function __construct()
    {
// プライベートコンストラクタ
    }

    public static function getInstance()
    {
        if (self::$instance === null) {
            self::$instance = new self();
        }
        return self::$instance;
    }
}

$singleton = Singleton::getInstance();

 

だめな使い方

インスタンスの状態を操作する処理

インスタンスの状態に依存するメソッドに`static`を使うべきではありません。staticメソッドはクラスレベルで動作するため、インスタンス固有の状態を保持することができません。

class User {
  private $name;

  public static function setName($name) {
    $this->name = $name; // エラー: $thisを使えない
  }
}

 

過度な使用

全てのメソッドを`static`にすることは避けるべきです。

staticメソッドを多用すると、オブジェクト指向プログラミングの基本原則であるカプセル化多態性が損なわれる可能性があります。
特に、後からメソッドをオーバーライドする必要が出てきた場合に柔軟性を失います。

依存性注入の回避

staticメソッドは依存性注入と相性が悪く、テストやメンテナンスが難しくなる場合があります。テスト可能なコードを維持するためには、インスタンスメソッドを使用し、必要な依存関係をコンストラクタやセッターで注入する方が望ましいです。

まとめ

static メソッドは、クラス固有の処理やユーティリティ関数として適切に使用することで、コードの構造を明確にし、インスタンス化を不要にするメリットがあります。ただし、過度な使用はオブジェクト指向の原則を損なう可能性があるため、状況に応じて適切に使い分けることが重要です。

 

Twitterでフォローしよう

読んでみーな
おすすめの記事