PHP でユーザ定義関数を記述するさい、知っておくと便利な記述の仕方を紹介します。
今回は、関数を使うテクニック「引数の参照渡し」「引数の初期値」「可変関数」についてまとめます。
関連
ユーザ定義関数の基本については「ユーザ定義関数」にまとめています
関数の使い方:引数の「値渡し」と「参照渡し」
以下のような PHP プログラムで考えてみましょう。
1 2 3 4 5 6 7 8 9 10 |
<?php function my_inc($val) { $val = $val + 1; return $val; } $val = 20; echo "<br />20=>" . my_inc($val); echo $val; ?> |
出力結果
20=>21
20
呼出し元の $val は関数 my_inc() 内で +1 されますが、引数で渡した元の $val の値は変わらないままです。
これは、関数の引数に「値渡し」で変数を渡しているからです。
関数の引数に渡した変数を、関数内の処理で変更したい場合は「参照渡し」を行う必要があります。
参照渡しを行うには、以下のいずれかの方法で行います。
1 2 3 4 5 6 7 8 9 10 |
<?php function my_inc($val) { $val = $val + 1; return $val; } $val = 20; echo "<br />20=>" . my_inc(&$val); echo $val; ?> |
変数の前に「&」をつけて「参照渡し」にして関数へ渡すことができます。
1 2 3 4 5 6 7 8 9 10 |
<?php function my_inc(&$val) { $val = $val + 1; return $val; } $val = 20; echo "<br />20=>" . my_inc($val); echo $val; ?> |
常に my_inc() の関数に「参照渡し」で引数を渡したい場合は、
関数定義の引数に予め「&」をつけることで、呼び出し側では付けなくてよくなります。
関数の使い方:引数に初期値を設定
関数に引数があっても、呼び出し元で引数を省略することができます。
呼出し側で引数が省略されたときに使用される値(初期値)の設定方法です。
1 2 3 4 5 6 7 |
<?php function my_inc($val = 20) { return $val + 1; } echo my_inc(); ?> |
出力結果
21
先ほどの関数の引数に初期値「20」を設定しました。
引数を省略して呼び出すと、初期値で計算された値が返ってきます。
注意ポイント
引数が複数ある場合、初期値を設定した引数の次に、普通の引数を設置することはできません。
引数を省略して呼び出した際に、エラーとなります。
「function test($val=20, $key)」となる場合は、「function test($key, $val=20)」としましょう。
関数の使い方:可変関数
プログラムを作っていると、条件によって呼出す関数を使い分けたいシーンは多いと思います。
PHP では、「可変関数」を使って関数を呼出すことができます。
参考
PHP での条件分岐については「条件分岐(switch文)」にまとめています。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$test_case = "1"; switch($test_case) { case "1": test_function_1(); break; case "2": test_function_2(); break; default: test_function_3(); break; } |
上記のようなコードを可変関数を使って書き直すと、以下のようになります。
1 2 3 4 |
$test_case = "1"; $func = "test_function_" . $test_case; $func(); |