【PHP】可変長引数リスト
最近Androidの授業ではじめて、「…」の演算子に出会いました。
聞いてみたら、同じ型の引数を何個を入れてもいいようにするものでした。
PHPでたまたま、array_intersectに不定数の引数を入れる場面がありました。
これをきっかけに、PHPの可変長引数について調べてみました。
PHP 5.6 以降では 「…」 を使って実装されており、 PHP 5.5 以前では func_num_args(), func_get_arg(), func_get_args() 関数を使用します。
そのままの引用になりますが、理解しやすい例だと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?php // PHP5.6で「...」演算子を使った関数の定義 function sum(...$numbers) { $acc = 0; foreach ($numbers as $n) { $acc += $n; } return $acc; } echo sum(1, 2, 3, 4); // 「...」演算子は、関数を呼び出すときにも使えそう function add($a, $b) { return $a + $b; } echo add(...[1, 2])."\n"; $a = [1, 2]; echo add(...$a); ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php // PHP5.5以下でのfunc_num_args、func_get_argとfunc_get_argsの使用 function foo() { $numargs = func_num_args(); echo "引数の数: $numargs<br />\n"; if ($numargs >= 2) { echo "二番目の引数は: " . func_get_arg(1) . " です。<br />\n"; } $arg_list = func_get_args(); for ($i = 0; $i < $numargs; $i++) { echo "引数 $i は: " . $arg_list[$i] . " です。<br />\n"; } } foo(1, 2, 3); ?> |
ちなみに、本件とあまり関係ないですが、array_intersectに不定数の引数を使う場合は、下記の書き方でよさそうです。
1 2 3 | // PHP5.5以下の場合 $array = array(array(4,5,6),array(3,4,5)); call_user_func_array("array_intersect", $array); |
Author Profile
スターフィールド編集部
SHARE