ch04 6章中 4章目

ch04 — デフォルト引数

スライドで見る

この章を AI と学ぶ

💬 AI に聞く質問例 3 件
  1. 「ch04 — デフォルト引数」のつまずきやすいポイントを、初学者向けに3つ教えてください

    ChatGPT Claude Gemini

  2. 「ch04 — デフォルト引数」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    ChatGPT Claude Gemini

  3. 「ch04 — デフォルト引数」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    ChatGPT Claude Gemini

概要

デフォルト引数は 「呼び出し側が値を省略したときに自動的に使われる値」 を、関数の定義側で決めておく仕組みだ。function greet($name, $suffix = "さん") のように = 付きで宣言すると、greet("太郎") でも greet("太郎", "様") でも呼べるようになる。よく使う既定値を関数側に持たせておけば、呼び出し側のコードが短くなり、後から新しい引数を追加しても既存の呼び出しを壊さずに済む。

PHP の重要なルールは デフォルト値を持つ引数は必須引数より後ろに並べる こと。function f($a = 0, $b) のように必須引数を後ろに置くと、呼び出し時に $a だけ省略する書き方ができなくなって混乱する。「左から必須・右からデフォルト」の順序を守るのが基本になる。

このチャプターで補足として知っておきたいのが PHP 8 の 名前付き引数 だ。greet(name: "太郎", suffix: "様") のように名前で渡せば順序に縛られず、デフォルトを途中だけ上書きできる。設計時の選択肢として頭の片隅に置いておき、まずはデフォルト引数を「右から省略可能」のルールで安全に書ける状態を目指す。

学習目標

  • function f($x = 10) { ... } でデフォルト値を指定できる
  • 呼び出し側で引数を省略するとデフォルト値が使われる
  • デフォルトを持つ引数は必須引数の 後ろ に並べる

ドリル

no 内容
01 greet($name, $suffix = "さん") を作る
02 multiply($a, $b = 2) を作る

解説スライド 全 6 枚

右の ボタン キー(またはスワイプ)で次のスライドに進めます。 下の「縦表示」を開くと全スライドを一気に読めます。

  1. デフォルト引数

    Lesson 7 / Chapter 4

  2. 引数を毎回渡すのが冗長な場合がある

    <?php
    function greet($name, $suffix) {
        echo $name . " " . $suffix . "\n";
    }
    
    greet("太郎", "さん");
    greet("花子", "さん");
    greet("次郎", "さん");
    • ほぼ毎回 "さん" を渡している
    • もし「省略したらデフォルトで "さん"」にできれば楽
    • そのための仕組みが デフォルト引数
  3. $x = 値 で既定値を指定

    <?php
    function greet($name, $suffix = "さん") {
        echo $name . " " . $suffix . "\n";
    }
    
    greet("太郎");          // 太郎 さん
    greet("花子", "ちゃん"); // 花子 ちゃん
    • $suffix = "さん" と書くと、省略時にこの値が使われる
    • 値を渡せばその値が優先される
  4. デフォルト引数は必須引数の後ろに並べる

    <?php
    // OK: 必須 → デフォルトの順
    function ok($a, $b = 2) { ... }
    
    // NG: デフォルト → 必須 はやらない
    function bad($a = 2, $b) { ... }
    • 必須の引数を前、デフォルト付きを後ろに書くのが基本
    • 順番を逆にすると、省略の挙動が直感に反する
  5. 数値のデフォルトも書ける

    <?php
    function multiply($a, $b = 2) {
        return $a * $b;
    }
    
    echo multiply(5) . "\n";    // 10  ($b は 2)
    echo multiply(5, 3) . "\n"; // 15
    • デフォルト値は文字列・数値・真偽値などが使える
    • 関数呼び出しの結果や変数は デフォルトに使えない (定数式のみ)
  6. このチャプターでできるようになること

    $x = 既定値 でデフォルト引数を指定できる ✅ 呼び出し側で省略すると既定値が使われる ✅ 値を渡せば既定値より優先される ✅ デフォルト引数は必須引数の後ろに並べる

    → ドリルへ

1 / 6
📜 スライドを全部一気に読む(縦表示)

Lesson 7 / Chapter 4


引数を毎回渡すのが冗長な場合がある

<?php
function greet($name, $suffix) {
    echo $name . " " . $suffix . "\n";
}

greet("太郎", "さん");
greet("花子", "さん");
greet("次郎", "さん");
  • ほぼ毎回 "さん" を渡している
  • もし「省略したらデフォルトで "さん"」にできれば楽
  • そのための仕組みが デフォルト引数

$x = 値 で既定値を指定

<?php
function greet($name, $suffix = "さん") {
    echo $name . " " . $suffix . "\n";
}

greet("太郎");          // 太郎 さん
greet("花子", "ちゃん"); // 花子 ちゃん
  • $suffix = "さん" と書くと、省略時にこの値が使われる
  • 値を渡せばその値が優先される

デフォルト引数は必須引数の後ろに並べる

<?php
// OK: 必須 → デフォルトの順
function ok($a, $b = 2) { ... }

// NG: デフォルト → 必須 はやらない
function bad($a = 2, $b) { ... }
  • 必須の引数を前、デフォルト付きを後ろに書くのが基本
  • 順番を逆にすると、省略の挙動が直感に反する

数値のデフォルトも書ける

<?php
function multiply($a, $b = 2) {
    return $a * $b;
}

echo multiply(5) . "\n";    // 10  ($b は 2)
echo multiply(5, 3) . "\n"; // 15
  • デフォルト値は文字列・数値・真偽値などが使える
  • 関数呼び出しの結果や変数は デフォルトに使えない (定数式のみ)

このチャプターでできるようになること

$x = 既定値 でデフォルト引数を指定できる ✅ 呼び出し側で省略すると既定値が使われる ✅ 値を渡せば既定値より優先される ✅ デフォルト引数は必須引数の後ろに並べる

→ ドリルへ

この章で取り組む 演習問題の流れ (2ステップ)
  1. 01 ドリル 01 — greet($name, $suffix = "さん") を作る README.md starter.php answer.php
  2. 02 ドリル 02 — multiply($a, $b = 2) を作る README.md starter.php answer.php

演習問題の詳細

この章の演習問題の内容を読めます。実際に手元で解くには教材リポジトリを clone してください。

ドリル 01 — greet($name, $suffix = "さん") を作る

問題

引数 $name と、デフォルト値 "さん" を持つ $suffix を受け取り、<name> <suffix> を 1 行出力する関数 greet を定義してください。

定義した後、次の順に呼んでください。

  1. greet("太郎") (suffix を省略)
  2. greet("花子", "ちゃん") (suffix を指定)
  3. greet("田中", "様") (suffix を指定)

期待される出力:

太郎 さん
花子 ちゃん
田中 様

ヒント

  • function greet($name, $suffix = "さん") { echo $name . " " . $suffix . "\n"; }
  • 呼び出し時に 2 つ目の引数を省略するとデフォルトの "さん" が入る

🧪 ブラウザで試す

スライドのコードを写経して ▶ 実行、自分で書いて 📝 採点 で答え合わせ。初回のみ PHP ランタイム読込で数秒かかります。

PHP ランタイム未読込

          

        

ドリル 02 — multiply($a, $b = 2) を作る

問題

引数 $a と、デフォルト値 2 を持つ $b を受け取り、$a * $breturn で返す関数 multiply を定義してください。

定義した後、次の順に呼んで戻り値を 1 行ずつ出力してください。

  1. multiply(5) (b を省略 → 2 倍)
  2. multiply(5, 3) (b を指定)
  3. multiply(7) (b を省略 → 2 倍)

期待される出力:

10
15
14

ヒント

  • function multiply($a, $b = 2) { return $a * $b; }
  • echo multiply(5) . "\n"; のように戻り値を出力

🧪 ブラウザで試す

スライドのコードを写経して ▶ 実行、自分で書いて 📝 採点 で答え合わせ。初回のみ PHP ランタイム読込で数秒かかります。

PHP ランタイム未読込

          

        

演習問題(2問)

  1. ドリル 01 — greet($name, $suffix = "さん") を作る

    README.md starter.php answer.php

  2. ドリル 02 — multiply($a, $b = 2) を作る

    README.md starter.php answer.php

サイト内で問題文・雛形・解答例を確認できます。実際に手元で解くには教材リポジトリを clone してください。

完了にすると進捗に反映されます