採点されません。匿名です。 間違えることは学習の一部です。読むだけでもかまいません。

デフォルト引数

テクノロジ系 / function (関数定義・引数・return・型宣言)

デフォルト引数

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 = 既定値 でデフォルト引数を指定できる

✅ 呼び出し側で省略すると既定値が使われる

✅ 値を渡せば既定値より優先される

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

→ ドリルへ

考えてみよう

既定では正解・不正解の判定はしません。自分のペースで「答えを見る」を。採点してほしい場合だけ「採点してほしい」を押してください。

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

問題

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

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

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

期待される出力:

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

採点

php scripts/grade.php topics/function/ch04-default-args/drill/01-default-suffix/

ヒント

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

ドリル 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

採点

php scripts/grade.php topics/function/ch04-default-args/drill/02-default-multiply/

ヒント

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