基礎

PHPのデフォルト引数|省略可能な引数の設定方法

PHPでは関数の引数にデフォルト値(初期値)を設定することができます。デフォルト値を持つ引数は、関数呼び出し時に省略可能になり、省略された場合はあらかじめ指定した値が自動的に使われます。

これにより、呼び出し側のコードを簡潔に保ちながら、必要に応じて柔軟にパラメータを変更できる関数を設計できます。APIやライブラリの設計では特に頻繁に使われるテクニックです。

基本的な使い方

仮引数の後ろに = で値を指定するだけで、デフォルト値を設定できます。

PHP
<?php
function greet($name, $greeting = "こんにちは") {
    echo $greeting . "、" . $name . "さん!\n";
}

greet("田中");
greet("佐藤", "おはよう");
実行結果
こんにちは、田中さん!
おはよう、佐藤さん!

最初の呼び出しでは $greeting を省略しているため、デフォルト値の「こんにちは」が使われます。2番目の呼び出しでは「おはよう」を明示的に渡しているため、デフォルト値は上書きされます。

複数のデフォルト引数

複数の引数にデフォルト値を設定することも可能です。ただし、デフォルト値を持つ引数は、持たない引数より後ろに配置する必要があります。

PHP
<?php
function calcTax($price, $taxRate = 0.10, $roundUp = false) {
    $total = $price * (1 + $taxRate);
    if ($roundUp) {
        return ceil($total);
    }
    return floor($total);
}

echo calcTax(1980) . "\n";           // 税率10%、切り捨て
echo calcTax(1980, 0.08) . "\n";     // 税率8%、切り捨て
echo calcTax(1980, 0.10, true) . "\n"; // 税率10%、切り上げ
実行結果
2178
2138
2178

このように、最も変更頻度の低い引数を後ろに配置することで、多くの呼び出しで引数を省略できるようになります。

配列やnullをデフォルト値に使う

デフォルト値にはスカラー値だけでなく、配列や null も指定できます。

PHP
<?php
function createUser($name, $roles = [], $email = null) {
    echo "名前: " . $name . "\n";
    echo "権限: " . (empty($roles) ? "なし" : implode(", ", $roles)) . "\n";
    echo "メール: " . ($email ?? "未設定") . "\n";
    echo "---\n";
}

createUser("管理者", ["admin", "editor"], "admin@example.com");
createUser("ゲスト");
実行結果
名前: 管理者
権限: admin, editor
メール: admin@example.com
---
名前: ゲスト
権限: なし
メール: 未設定
---

実用的な例

ログ出力関数やHTMLタグ生成関数など、実務でよく使うパターンを紹介します。

PHP
<?php
// ログ出力関数
function writeLog($message, $level = "INFO", $timestamp = true) {
    $output = "";
    if ($timestamp) {
        $output .= "[" . date("Y-m-d H:i:s") . "] ";
    }
    $output .= "[" . $level . "] " . $message;
    echo $output . "\n";
}

writeLog("アプリケーション開始");
writeLog("設定ファイルが見つかりません", "WARNING");
writeLog("デバッグメッセージ", "DEBUG", false);
実行結果
[2026-02-19 10:00:00] [INFO] アプリケーション開始
[2026-02-19 10:00:00] [WARNING] 設定ファイルが見つかりません
[DEBUG] デバッグメッセージ
引数の順序に注意

デフォルト値を持たない引数の後ろに、デフォルト値を持つ引数を配置してください。逆にすると、デフォルト値を持つ引数を省略できなくなります。例えば function bad($a = 1, $b) のような定義は推奨されません。PHP 8.0以降では非推奨の警告が表示されます。

定数式も使える

PHP 5.6以降、デフォルト値には定数式(定数同士の演算や配列リテラルなど)を使用できます。ただし、関数呼び出しや変数は使用できません。例えば function f($x = 1 + 2) は有効ですが、function f($x = time()) はエラーになります。

まとめ

  • 引数に = 値 でデフォルト値を設定でき、呼び出し時に省略可能になる
  • デフォルト値を持つ引数は、持たない引数より後ろに配置する
  • スカラー値だけでなく配列や null もデフォルト値に使える
  • 変更頻度の低いパラメータを後ろに配置するのが設計のコツ
  • 定数式はデフォルト値に使えるが、関数呼び出しは使えない