#20 PHPで学ぶ関数の応用(デフォルト引数・可変長引数)の基本

関数をもっと便利に使いこなそう

PHPで関数を書けるようになると、次に気になるのが「もっと柔軟に引数を受け取れないか」という悩みではないでしょうか。呼び出し側で引数を省略できたり、いくつでも値を渡せたりすると、関数の使い勝手はぐっと上がります。この記事では、PHPの「デフォルト引数」と「可変長引数」という2つの機能を、初心者の方にもわかりやすく解説します。関数(function)とは、決まった処理をひとまとめにして名前を付け、何度も呼び出せるようにする仕組みのことです。すでに基本的な関数の書き方を知っている前提で読み進めてください。

デフォルト引数とは

デフォルト引数とは、関数を呼び出すときに値(引数)を省略した場合に自動で使われる初期値のことです。引数(パラメータ)の右側に = 値 の形で指定します。

function greet($name, $honorific = "さん") {
    echo "{$name}{$honorific}、こんにちは!\n";
}

greet("田中");         // 田中さん、こんにちは!
greet("鈴木", "先生");  // 鈴木先生、こんにちは!

ここで注意したいのは、デフォルト引数は必ず「引数リストの後ろの方」に置く必要があるという点です。function greet($honorific = "さん", $name) のように、デフォルト値を持つ引数の後ろに省略できない引数を置くと、意図しない結果になることがあります。場合によってはエラーになることもあるので注意しましょう。PHP 8以降は「名前付き引数」も使えるようになり、greet(name: "田中") のように引数名を明示して呼び出すことも可能です。名前付き引数を使えば順番の制約を気にせず、省略したい引数だけを飛ばして指定できるので、あわせて覚えておくと便利です。

可変長引数とは

可変長引数とは、いくつ渡されるかわからない数の引数を、まとめて1つの配列として受け取れる機能です。引数の前に ...(3つのドット)を付けます。これは「スプレッド演算子」とも呼ばれ、JavaScriptの ...args と似た書き方です。

function total(...$numbers) {
    return array_sum($numbers);
}

echo total(1, 2, 3);       // 6
echo total(10, 20, 30, 40); // 100

可変長引数を使う関数の中では、$numbers は普通の配列として扱えるので、foreach でループしたり count() で個数を数えたりできます。逆に、既にある配列を関数に渡す際は、配列名の前に ... を付けることで、配列の要素を個別の引数として展開できます(これを「アンパック」と呼びます)。

$values = [5, 15, 25];
echo total(...$values); // 45

デフォルト引数と可変長引数を組み合わせる

通常の引数・デフォルト引数・可変長引数は同じ関数の中で組み合わせられますが、可変長引数は必ず引数リストの一番最後に書くというルールがあります。

function order($item, $unit = "個", ...$options) {
    echo "{$item}を{$unit}単位で注文。オプション: " . implode(",", $options) . "\n";
}

order("りんご", "箱", "急ぎ", "ギフト包装");

つまずきやすいポイント

初心者がよく戸惑うのが、デフォルト値には「定数式」しか使えないという制約です。たとえば別の変数や関数の実行結果をデフォルト値にすることは基本的にできません(nullをデフォルトにして関数内で判定する書き方がよく使われます)。また、可変長引数に型を指定することもできます。function total(int ...$numbers) のように書けば、渡された値がすべて整数であることを保証できます。型が違う値を渡すとエラーになるため、バグの早期発見にも役立ちます。Pythonの *args や **kwargs に慣れている方は、PHPでは可変長引数(...)と名前付き引数が別々の仕組みとして分かれている点に注意しましょう。

まとめ

デフォルト引数を使えば呼び出し側のコードをシンプルに保てますし、可変長引数を使えば「引数の数が決まっていない」柔軟な関数を作れます。どちらもPHPでよく使われるテクニックなので、実際にコードを書きながら慣れていきましょう。まずは自分の書いた関数に、省略可能な引数を1つ追加してみるところから試してみてください。

関連記事


本ページはプロモーションを含みます。

参考書籍(PR)

PHPをもっと学びたい方には「10日でおぼえるPHP入門教室 第4版」がおすすめです。


PR

コードを書かずに自動化したい方へ

「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本