【初心者向け】PHPでオーバーロードを使う3つの方法!

皆さん、「オーバーロード」という言葉は知っていますか?

Javaなど他の言語を学んだ方の中には、「オーバーロード」という機能に馴染みがあるかもしれません。
しかしPHP初心者にとっては、オーバーロードの機能自体が難しく感じる事でしょう。

結論から言いますと、

PHPでオーバーロードは使えない!

です。

しかし、工夫をすればオーバーロード的な機能を実装することができます。

そこで今回はPHP初心者に向けて、

  • ・オーバーロードとは何か?
  • ・オーバーロードを実装する3つの方法

を紹介します。

PHP初心者がつまづきやすいポイントを分かりやすく解説します。
オーバーロードっていまいち分からない方は、ぜひ最後まで読んで理解を深めてくださいね。

オーバーロードとは

まずは、「オーバーロード」とは何かから説明しましょう。
オーバーロードとは、

引数違いの関数を複数定義する方法

です。
例えば、足し算をする例で考えましょう。
引数にとる数字を全て足してみます。

このコードはエラー Fatal error: Cannot redeclare cal() といわれ動きません。

PHPでは、同名の関数を複数定義することはできません。
では、どうすればこの処理を実現できるでしょうか?

ここでは、3つの方法をご紹介します。

引数の数で条件分岐させる方法

まずは、引数の数で処理を分岐させる方法です。
使うのは func_num_args( ) func_get_args() です。

ここでは

  1. func_num_args()を使って関数cal()に渡された引数の数を数えて、
  2. func_get_args()を使って引数を配列$numに収納し、
  3. 数字が2個の場合、3個の場合と場合分けをして処理

このような流れの処理になっています。
条件が少ない場合はこれでも良いですが、引数の数が多い場合は書くのが大変です。

可変長引数リストを利用する方法

PHP5.6以降では、「可変長引数リスト」という仕組みが使えます。
書き方は、関数の引数の前に「…(3点ピリオド)」を付けます。

可変長引数リストとは、

  • ・関数が可変長(数が変動する)変数を受け取ることができる。
  • ・変数を配列として渡す。

というものです。
先ほどのコードを書き直してみましょう。

このように、関数を使わずに簡潔に書くとこができます。

デフォルト値を利用する方法

最後は、引数のデフォルト値を使う方法です。

こちらは、あらかじめ引数に値を設定しておき、引数が呼び出されない場合はデフォルト値を使うというものです。

このように、$helloに対応する引数が呼ばれないときは、デフォルト値の’こんにちは’が呼ばれることになります。

厳密にはオーバーロードとは異なりますが、便利な使い方ですの覚えておきましょう。

まとめ

今回はPHPのオーバーロードにおいて、

  • ・オーバーロードとは
  • ・PHPでオーバーロードを実現する3つの方法

を解説しました。

オーバーロードは必ずしも使う必要はないですが、使えると便利な機能ですので理解できるようにしておきましょう。