皆さん、「オーバーロード」という言葉は知っていますか?
Javaなど他の言語を学んだ方の中には、「オーバーロード」という機能に馴染みがあるかもしれません。
しかしPHP初心者にとっては、オーバーロードの機能自体が難しく感じる事でしょう。
結論から言いますと、
PHPでオーバーロードは使えない!
です。
しかし、工夫をすればオーバーロード的な機能を実装することができます。
そこで今回はPHP初心者に向けて、
- ・オーバーロードとは何か?
- ・オーバーロードを実装する3つの方法
を紹介します。
PHP初心者がつまづきやすいポイントを分かりやすく解説します。
オーバーロードっていまいち分からない方は、ぜひ最後まで読んで理解を深めてくださいね。

オーバーロードとは
まずは、「オーバーロード」とは何かから説明しましょう。
オーバーロードとは、
引数違いの関数を複数定義する方法
です。
例えば、足し算をする例で考えましょう。
引数にとる数字を全て足してみます。
このコードはエラー Fatal error: Cannot redeclare cal() といわれ動きません。
PHPでは、同名の関数を複数定義することはできません。
では、どうすればこの処理を実現できるでしょうか?
ここでは、3つの方法をご紹介します。
引数の数で条件分岐させる方法
まずは、引数の数で処理を分岐させる方法です。
使うのは func_num_args( ) と func_get_args() です。
ここでは
- func_num_args()を使って関数cal()に渡された引数の数を数えて、
- func_get_args()を使って引数を配列$numに収納し、
- 数字が2個の場合、3個の場合と場合分けをして処理
このような流れの処理になっています。
条件が少ない場合はこれでも良いですが、引数の数が多い場合は書くのが大変です。
可変長引数リストを利用する方法
PHP5.6以降では、「可変長引数リスト」という仕組みが使えます。
書き方は、関数の引数の前に「…(3点ピリオド)」を付けます。
可変長引数リストとは、
- ・関数が可変長(数が変動する)変数を受け取ることができる。
- ・変数を配列として渡す。
というものです。
先ほどのコードを書き直してみましょう。
このように、関数を使わずに簡潔に書くとこができます。

デフォルト値を利用する方法
最後は、引数のデフォルト値を使う方法です。
こちらは、あらかじめ引数に値を設定しておき、引数が呼び出されない場合はデフォルト値を使うというものです。
このように、$helloに対応する引数が呼ばれないときは、デフォルト値の’こんにちは’が呼ばれることになります。
厳密にはオーバーロードとは異なりますが、便利な使い方ですの覚えておきましょう。
まとめ
今回はPHPのオーバーロードにおいて、
- ・オーバーロードとは
- ・PHPでオーバーロードを実現する3つの方法
を解説しました。
オーバーロードは必ずしも使う必要はないですが、使えると便利な機能ですので理解できるようにしておきましょう。