PHP 複数の引数とデフォルト値,配列
関数
今回も前回に引き続き、関数について記述していきたいと思います。
ユーザ定義関数に複数の引数を持たせる
前回自分で作成した関数に引数を1つ渡したサンプルを記述しましたが、
この引数は1つではなく、複数渡すことができます。
複数の引数を渡す方法
関数に複数の引数を渡す場合は、引数の間に ,(カンマ)を入れます。
以下では、$hensuu1 が $atai1 にコピーされ、$hensuu2 が $atai2 にコピーされるサンプルです。
<?php function test($atai1, $atai2){ echo "atai1 == $atai1<br>"; echo "atai2 == $atai2<br>"; } $hensuu1 = 10; $hensuu2 = 20; test($hensuu1, $hensuu2); ?>
表示結果は以下のようになります。
このように , で分けてやることで複数の引数を関数に渡すことができます。
引数のデフォルト値
関数に渡す引数の値が無い場合に、関数側でその変数にセットする値を指定することができます。
関数の本体側で以下のように $atai = “デフォルト値” のようにして記述しておきます。
すると、引数を与えずに実行した場合にそのデフォルト値が $atai にセットされます。
<?php function test($atai = 999){ echo "atai == $atai<br>"; } test(); $hensuu = 10; test($hensuu); ?>
ただし以下のようにNULL値を渡してもデフォルト値はセットされないので注意する必要があります。
<?php function test($atai = 999){ echo "atai == $atai<br>"; } test(NULL); ?>
この場合は以下のように何も値がセットされないことになります。
関数に配列を渡す
また関数に配列を渡すこともできます。
以下では配列を関数に渡して表示しています。
<?php function test($atai = 999){ echo "<pre>"; print_r ($atai); echo "</pre>"; } $array1 = array(10, 20, 30); test($array1); ?>
関数の値渡し・参照渡し
今まで変数に格納して関数に渡した値は、関数本体で実行時に変数などに格納しますが、
これは値をコピーしているだけなので、値を格納している呼び出し側の変数の中身を変えることはできません。
この渡し方は値渡しなどと呼ばれています。
だが関数の処理内容によってはこの値を変更したいといったことがあるかもしれません。
その場合は参照渡しをすれば解決できます。
参照渡しの場合は値をコピーするのではなく、
その呼び出し側で指定した引数の変数のメモリ上のアドレスを渡しています。
そのため値の変更などを行うと、呼び出し側の値が変わるということになります。
値渡しの場合
まず通常の値渡しをした場合では値が変わらないことを確認します。
<?php function test($atai){ $atai += $atai; } $hensuu = 10; test($hensuu); echo "関数実行後の表示: $hensuu<br>"; ?>
結果は以下のように $hensuu の値は変わっていません。
参照渡しをした場合
続いて参照渡しを使用すると値が変わることを確認します。
参照渡しでは
参照渡しをする場合は変数名の前に &(アンド)を付けます。
<?php function test(&$atai){ $atai += $atai; } $hensuu = 10; test($hensuu); echo "関数実行後の表示: $hensuu<br>"; ?>
また以下のようにしても同じ結果になります。
<?php function test($atai){ $atai += $atai; } $hensuu = 10; test(&$hensuu); echo "関数実行後の表示: $hensuu<br>"; ?>
結果は以下のように関数実行後には呼び出し側に指定していた引数の変数の中身が下記変わっていました。
return文
関数で処理した結果を返したい場合は return文を使用します。
return 戻り値;
のように記述するとその関数を抜ける際に呼び出し元にその return の引数に指定した値を返すことができます。
return で返した値は呼び出し側で
$戻り値を格納する変数 = 関数名();
のようにすると、$戻り値を格納する変数 にreturn の引数が格納されます。
戻り値を返したい場合
以下では関数に数値を渡して、2乗した結果を return で返しています。
<?php function test($atai){ $atai *= $atai; return $atai; } $hensuu = 5; $ans = test($hensuu); echo $ans; ?>
複数の戻り値を返したい場合
returnで値を複数返したい場合は、配列に格納して返します。
<?php function test(){ $array_i = array(5, 15, 25); return $array_i; } $array_o = test(); echo "<pre>"; print_r ($array_o); echo "</pre>"; ?>
ちなみに returnに引数を与えなければそのまま関数を抜けるだけなので、
break文と同じような意味になります。