デフォルト引数
テクノロジ系 / 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 を定義してください。
定義した後、次の順に呼んでください。
greet("太郎")(suffix を省略)greet("花子", "ちゃん")(suffix を指定)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 * $b を return で返す関数 multiply を定義してください。
定義した後、次の順に呼んで戻り値を 1 行ずつ出力してください。
multiply(5)(b を省略 → 2 倍)multiply(5, 3)(b を指定)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";のように戻り値を出力