[ PHP ] (無名)関数内で可変長引数の個数と値を取得する ( func_get_args )

Pocket

ここでは、PHP の関数内で可変長引数の個数と値を取得するサンプルを掲載しています。あくまで、できる・できないの話であり、使用すべきか否かはまた別です。個人的には、ここで掲載しているサンプルの内容の使用は使わないほうが良いと思います。と、言いますか私は使いたくありません。

スポンサーリンク

可変長パラメータを取得

可変長パラメータの個数と値を取得するサンプルになります。PHP では関数に引数が宣言されていなくても、引数付きで呼び出せます。(先生!余計なお世話だと思います)

function func()
{
    // パラメータ数を取得する
    $num = func_num_args();

    // パラメータを1つずつ取得する
    for ($i = 0; $i < $num; $i++) { $arg = func_get_arg($i); var_dump($arg); } 
    // パラメータを配列ですべて取得する 
    foreach (func_get_args() as $name => $value) {
        echo $name . ':';
        var_dump($value);
    }

    return true;
}

$ret = func(1, 2, array('apple' => 'りんご', 'orange' => 'みかん'));

可変長パラメータを扱う関数使用上の注意

上記では、function func($p1, $p2, $p3) のように関数を宣言することももちろんできます(そうしていると思います)。なお、サンプル内で使用している可変長パラメータを扱う関数は、関数に宣言されているパラメータの個数ではなく、 あくまでも実際に与えられたパラメータのみを扱いますので注意が必要です。次のサンプルを確認ください。

function func($p1, $p2, $p3, $p4 = 'p4', $p5 = 'p5')
{
    $num = func_num_args();   // パラメータ数は3。5ではない。
    
    $arg = func_get_arg(3);   // Warning: func_get_arg(): Argument 3 not passed to function 

    // パラメータを配列ですべて取得する
    $num = count(func_get_args()); // 配列要素数は3。5ではない。
}

$ret = func(1, 2, array('apple' => 'りんご', 'orange' => 'みかん'));

無名関数でも可変長パラメータ関数は使用可能

無名関数内でも可変長パラメータ関数は使用できます。以下のサンプルスクリプトを確認ください。

$func = function()
{
    $num = func_num_args();   // パラメータ数
    var_dump($num);
    
    // パラメータを1つずつ取得する
    for ($i = 0; $i < $num; $i++) { $arg = func_get_arg($i); var_dump($arg); }     
    
    // パラメータを配列ですべて取得する 
    foreach (func_get_args() as $name => $value) {
        echo $name . ':';
        var_dump($value);
    }
};  // 括弧の後ろにセミコロンが必要

$ret = $func(1, 2, array('apple' => 'りんご', 'orange' => 'みかん'));
参考
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *