【PHP】可変長引数について【関数】
可変長引数とは
PHPの関数では、引数の数を決めずに関数を定義することができます。これを「可変長引数」と呼びます。可変長引数を使うことで、関数の柔軟性が増し、さまざまな数の引数を受け取ることが可能になります。
func_get_args() を使用する方法
PHP 5.6より前のバージョンでは、可変長引数を処理する方法として func_get_args()
を使用していました。この関数は、関数に渡された全ての引数を配列として返します。
function sum() {
$args = func_get_args();
$total = 0;
foreach ($args as $num) {
$total += $num;
}
return $total;
}
echo sum(1, 2, 3, 4, 5); // 出力: 15
func_get_arg() で個別に取得
func_get_arg($index)
を使用すると、特定の引数を個別に取得できます。
function showFirstArg() {
if (func_num_args() > 0) {
return func_get_arg(0);
}
return "引数がありません";
}
echo showFirstArg("PHP", "Java", "Python"); // 出力: PHP
この方法では、func_num_args()
を使って引数の数を取得し、適切に処理できます。
…演算子を使用する方法
PHP 5.6以降では、スプレッド構文(...$args
)を使用して可変長引数を簡潔に扱えるようになりました。
function sum(...$numbers) {
return array_sum($numbers);
}
echo sum(10, 20, 30); // 出力: 60
...$args
を使用すると、可変長引数が自動的に配列として渡されるため、func_get_args()
を使用するよりも簡潔になります。
型指定付きの可変長引数
PHP 7以降では、可変長引数にも型を指定することが可能になりました。これにより、意図しないデータ型の引数を排除できます。
function multiply(int ...$nums): int {
$result = 1;
foreach ($nums as $num) {
$result *= $num;
}
return $result;
}
echo multiply(2, 3, 4); // 出力: 24
ここで int ...$nums
を指定することで、すべての引数が整数であることを保証できます。
可変長引数の活用例
実際のプログラムで可変長引数がどのように使われるのか、いくつかの例を紹介します。
ログ出力関数
可変長引数を利用して、ログメッセージを柔軟に出力する関数を作成できます。
function logMessage(string $level, ...$messages) {
$timestamp = date("Y-m-d H:i:s");
foreach ($messages as $message) {
echo "[{$timestamp}] {$level}: {$message}\n";
}
}
logMessage("INFO", "システム起動", "設定ファイル読み込み完了");
配列の結合
複数の配列を結合する関数も可変長引数を活用できます。
function mergeArrays(array ...$arrays): array {
return array_merge(...$arrays);
}
$result = mergeArrays([1, 2], [3, 4], [5, 6]);
print_r($result); // 出力: Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 )
フォーマット変換
可変長引数を使って、文字列を動的にフォーマットする関数も作れます。
function formatString(string $format, ...$args) {
return sprintf($format, ...$args);
}
echo formatString("名前: %s, 年齢: %d", "田中", 25); // 出力: 名前: 田中, 年齢: 25
まとめ
PHPの可変長引数は、関数の柔軟性を向上させ、コードの可読性を高める便利な機能です。特に ...$args
を使用する方法は、より直感的でシンプルに可変長引数を処理できます。
- 古いバージョンでは
func_get_args()
を使用 func_get_arg()
で個別の引数取得が可能- PHP 5.6以降は
...$args
が推奨 - PHP 7以降は型指定も可能
- さまざまなユースケースで活用可能
可変長引数を適切に使いこなすことで、より柔軟でメンテナブルなコードを書けるようになります。