【PHP】オーバーロードとは? – PHPでしたいオーバーロード場合の対応方法

プログラミングではオーバーロードと呼ばれる仕組みがありますが、

PHPではオーバーロードはサポートされていません。

しかし、オーバーロードと同じような設計にしたい場合があると思います。

本記事ではPHPの仕組みを利用してオーバーロードを実現する方法を解説します。

★ 目的

  • オーバーロードを理解する。
  • PHPでオーバーロードを実現できるようになる。

オーバーロードとは

オーバーロードとはクラスのメソッド定義で引数が異なる同じメソッド名のメソッドを複数定義することです。

PHPで実現する

初頭で述べた通り、PHPではオーバーロードをサポートしていません。

オーバーロードを実現するにはPHPの仕組みを利用する必要があります。

それには可変長引数リストを使用します。可変長引数リストは関数、任意の数だけ引数を渡せる引数です。

サンプルコード

PHPでオーバーロードを使用する場合は次のように可変長引数リストで実装します。

ソースコード

<?php

// クラス定義
class Calculator {
    
    // 計算と結果を出力
    public function execute(...$data) {
        $total = null;
        if( isset($data[0]) ) {
            $total = $data[0];
        }
        if( isset($data[1]) ) {
            $total += $data[1];
        }
        if( isset($data[2]) ) {
            $total *= $data[2];
        }
        echo "total : {$total}\n";
    }
    
}

// インスタンスの生成
$calc = new Calculator();

// 計算結果を出力
$calc->execute(1, 2, 3);

?>

実行結果

total: 9

引数によって計算を実行するプログラムです。

各コードの概要を次になります。

行数概要
4〜21Calculatorクラスの定義。
24Calculatorクラスのインスタンスを生成し、$calcに代入。
27$calcのexecuteメソッドを実行。

7行目のexecuteメソッドの引数で可変長引数リストを使用しています。

可変長引数リストはドットを3つ繋げ、続いて変数名を記述します。

メソッド内では引数の存在可否に合わせて処理を実行して、オーバーロードのような設計を実現しています。

まとめ

PHPはオーバーロードをサポートしていませんが、可変長引数リストを使用することでオーバーロードと似た実装ができます。

ただ、PHPで正式にサポートされていない=推奨していないということかもしれないので、設計や動作を考慮して使いましょう。