開発畑トップ   »  PHP   »  [PHP]関数の引数が可変長の場合の処理方法

[PHP]関数の引数が可変長の場合の処理方法

2012年03月16日

Category:PHP

tag: PHP

ブログ作りました!
ということで、投稿テストも兼ねてまずは何か書いてみます。

PHPの関数(Function)に渡す値(関数の引数)の数が変動する場合の処理方法

たとえば、以下のような処理がある場合

<?php
  test1("a");
  test1("a", "b");
  test1("a", "b", "c");
?>

上記のコードは、test1関数を呼び出すだけの単純なプログラムです。
関数test1に渡す値(引数)は1個~3個となっているので通常は以下の方法で問題ありません。

<?php
  function test1($a, $b = '', $c = '') {
    $echo  = "{$a}を受け取りました。<br />";
    if ($b) $echo .= "{$b}も受け取りました。<br />";
    if ($c) $echo .= "{$c}も受け取りました。<br />";
    echo $echo;
  }
?>

上記の処理は、受け取る値に初期値を設定することで、関数を呼び出す際に省略できるようになります。
※詳しくはPHP: 関数の引数内のデフォルト引数値を参照してください。

しかし、関数test1が「受け取る値の数を知らない」場合はどうでしょうか。


たとえば、関数test1の引数が「1個~3個」と引数の上限が決まっていれば、先ほどの書き方で問題ないのですが、上限がわからない場合は以下のような方法があります。

<?php
  function test1() {
    if (func_num_args()) {
      $params = func_get_args();
    }else{
      $params = array();
    }
    if (count($params)) {
      $echo = '';
      foreach($params as $param) {
        $echo .= "{$param}を受け取りました。";
      }
      echo $echo;
    }
  }
?>

このコードでは、以下のような処理をしています。

  • 3行目のfunc_num_qrgs関数で受け取った引数の数を取得します。
  • その結果、引数が1個以上ある場合は、func_get_args関数で$params変数に引数(配列データ)を渡しています。
  • そこ後、受け取った引数(配列データ)をforeach文で出力しています。

詳しくは、先ほどのリンクPHP: 関数の引数内の可変長引数リストを参照してください。

引数の可変長なんてのは普段あまり使わないかもしれませんが、知っておいて損は無いと思います。

コメントをどうぞ!