PHPで可変長の引数を扱う

 PHPで可変長の引数を渡したいときは、 call_user_func_array という関数を使う。可変長の変数を配列に入れて、第1引数に文字列で関数名を書いて、第2引数に可変長の引数を渡す。

例えば、sprintf みたいな書き方でエスケープした文字列を作る関数を定義してみると、以下のように書く。

// パラメータをエスケープするための処理。(MySQLにつないでからじゃないと使えない)
function escape_query($condition_ary)
{
    _db_connect();
    // フォーマットを取得(第1引数)
    $format = array_shift($condition_ary);
 
    // 第2引数以降が、エスケープすべき値
    $escaped_value_ary = array();
    foreach($condition_ary as $_val)
    {
        $_escaped_val = mysql_real_escape_string($_val);
        array_push($escaped_value_ary, $_escaped_val);
    }
 
    array_unshift($escaped_value_ary, $format);
 
    return call_user_func_array('sprintf', $escaped_value_ary);
}
 
//呼ぶとき Railsぽく
$conditions = array("select * from fruits where color = '%s' and name = '%s'", $_POST['color'], $_POST['name']);
$escaped_str = escape_query($conditions);
PHPで可変長の引数を扱う