PHPで可変長引数の関数を定義

Posted by mkamo on 2009年7月1日

PHPで可変長引数の関数を定義する方法のメモ.

PHP4以降では関数に渡された引数の情報を取得するために以下の関数を使うことができる.

  • func_num_args()
    関数に渡された引数の数を返す
  • func_get_arg(int arg_num)
    関数に渡された引数のうちarg_num番目のものを返す.arg_numは0から数える整数
  • func_get_args()
    関数に渡された引数を配列で返す

可変長の引数を受け取る関数の例は以下のとおり.必須の引数$msg以外に任意の個数の引数を受け取り,$msg内の「{数字}」の箇所を置換した文字列を返す.この例ではfunc_get_args()だけを使っているが,func_num_args()とfunc_get_arg()を使っても実装できる.

<?php

function replaceMsg($msg) {
    /// すべての引数を取得
    $args = func_get_args();

    /// $msgを$argsから取り除く
    array_shift($args);

    $replacePairs = array();
    foreach ($args as $i => $arg) {
        $replacePairs['{'.$i.'}'] = $arg;
    }

    return strtr($msg, $replacePairs);
}

echo replaceMsg('There are {0}, {1} and {2}.', 'foo', 'bar', 'baz'); /// => There are foo, bar and baz.

?>


コメントを書く




XHTML: 次のタグが使用できます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Please note: 投稿されたコメントが表示されるにはいくらかの時間がかかります.投稿後直ちに表示されませんが投稿ボタンを何度も押さないようお願いします.