0Pricing
PHP Academy · レッスン

デフォルトパラメーターと可変長パラメーター

PHP関数でデフォルト値と可変長引数を使用します。

「デフォルトパラメーターと可変長パラメーター」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。

デフォルト引数値

デフォルト値を指定すると、呼び出し側で引数を省略できます。引数が渡されなかった場合は、デフォルト値が使われます。

<?php
function createUser(string $name, string $role = 'viewer'): string {
    return "$name ($role)";
}

echo createUser('Alice');          // Alice (viewer)
echo createUser('Bob', 'admin');   // Bob (admin)

デフォルト値のルール

デフォルト引数に関する重要なルールは次のとおりです。

  • デフォルト値のあるパラメータは、必須パラメータの後に置く必要があります
  • デフォルト値には定数式を指定する必要があり、関数呼び出しや変数は指定できません
  • PHP 8の名前付き引数では、順序に関する制約が緩和されます

NULL許容パラメータ

?typeを使うと、デフォルト値をNULLにして、NULLを有効な引数として受け取れます。

<?php
function findUser(?int $id = null): string {
    if ($id === null) {
        return 'Searching all users';
    }
    return "User #$id";
}

echo findUser();    // Searching all users
echo findUser(42);  // User #42

...を使った可変長関数

パラメータの前に...を付けると、可変個数の引数を配列として受け取れます。

<?php
function sum(int ...$numbers): int {
    return array_sum($numbers);
}

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

必須パラメータと可変長引数

必須パラメータと可変長引数を組み合わせ、可変長引数を最後に置くことができます。

<?php
function logMessage(string $level, string ...$messages): void {
    foreach ($messages as $msg) {
        echo "[$level] $msg" . PHP_EOL;
    }
}

logMessage('INFO', 'App started', 'Config loaded');

呼び出し時のスプレッド演算子

関数を呼び出すときに...を使うと、配列を個別の引数として展開できます。

<?php
function add3(int $a, int $b, int $c): int {
    return $a + $b + $c;
}

$args = [1, 2, 3];
echo add3(...$args);  // 6

$extra = [4, 5];
echo add3(1, ...$extra);  // 10

名前付き引数(PHP 8)

名前付き引数を使うと、パラメータ名で値を渡せるため、順序を無視できます。

<?php
function createTag(string $tag, string $content, string $class = ''): string {
    $cls = $class ? " class=\"$class\"" : '';
    return "<$tag$cls>$content</$tag>";
}

// Skip $class, pass $content by name
echo createTag(content: 'Hello', tag: 'p');
// <p>Hello</p>

組み込み関数での名前付き引数

名前付き引数は、PHPの組み込み関数でも使用できます。

<?php
$arr = [3, 1, 4, 1, 5];

// Traditional positional
$result1 = array_slice($arr, 1, 3);

// Named arguments
$result2 = array_slice(array: $arr, offset: 1, length: 3);

print_r($result1); // [1, 4, 1]

func_get_args()のレガシーな使い方

PHP 5.6で可変長引数構文が導入される前は、すべての引数にアクセスするためにfunc_get_args()が使われていました。レガシーコードで見かけることがあります。

<?php
function legacySum(): int {
    $args = func_get_args();
    return array_sum($args);
}

echo legacySum(1, 2, 3, 4);  // 10
// Modern: use int ...$numbers instead

型指定付き可変長引数

型ヒントと可変長パラメータを組み合わせると、入力を厳密に制限できます。

<?php
declare(strict_types=1);

function joinStrings(string $sep, string ...$parts): string {
    return implode($sep, $parts);
}

echo joinStrings('-', 'a', 'b', 'c');  // a-b-c
// joinStrings('-', 'a', 42); // TypeError in strict mode

デフォルト引数と名前付き引数の組み合わせ

名前付き引数とデフォルト値を組み合わせると、最大限柔軟に指定できます。

<?php
function sendEmail(
    string $to,
    string $subject,
    string $body = '',
    bool   $html  = false
): bool {
    // simulate send
    return true;
}

// Skip $body, pass $html by name
sendEmail('a@b.com', 'Hi', html: true);

クイックチェック

PHP関数の定義で...演算子は何をしますか。

まとめ:デフォルト引数と可変長引数

まとめ:

  • デフォルト値により、パラメータを省略できます
  • デフォルト値のあるパラメータは、必須パラメータの後に置きます
  • ?typeにより、オプションのデフォルト値としてNULLを指定できます
  • ...$argsにより、可変長引数を配列にまとめられます
  • スプレッド演算子...$arrにより、呼び出し時に配列を展開できます
  • 名前付き引数(PHP 8)は、位置ではなく名前で値を渡します

よくある質問

「デフォルトパラメーターと可変長パラメーター」レッスンは無料ですか?

はい。「デフォルトパラメーターと可変長パラメーター」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。

「デフォルトパラメーターと可変長パラメーター」で何を学びますか?

PHP関数でデフォルト値と可変長引数を使用します。 ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

PHP Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「デフォルトパラメーターと可変長パラメーター」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPHP Academyレッスンでコードを書いて実行できますか?

はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 関数の定義と呼び出し
  2. デフォルトパラメーターと可変長パラメーター
  3. 変数のスコープ:ローカルとグローバル
  4. 匿名関数とクロージャ
← PHP Academyに戻る