Code Fix

上級

同じ名前付き引数を2回指定すると Named parameter overwrites エラーになる

PHP8の名前付き引数は、同じパラメータ名を2回指定すると致命的エラーになります。位置引数と名前付き引数を混ぜて書いた際に、同じパラメータへ二重に値を渡してしまうミスで起こります。

エラーメッセージの読み方

Fatal error: Uncaught Error: Named parameter $name overwrites previous argument in main.php:5
main.php
ファイル名
5
行番号 — 実際にクラッシュした行
Error
例外クラス — 何が起きたか。ここを検索するのが最短です
Named parameter $name overwrites previous argument
内容 — どの値が問題だったか

このエラーが出る典型パターン

パターン1

 1  <?php
 2  function makeUser(string $name, int $age) {
 3      return "$name is $age";
 4  }
 5  echo makeUser(name: "Al", name: 20);
                                ^
Fatal error: Uncaught Error: Named parameter $name overwrites previous argument in main.php:5

name:を2回指定すると、2回目が1回目を上書きしようとしてエラーになります。2つ目の引数には別のパラメータ名ageを指定する必要があります。

直し方: name を age にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  <?php
 2  function makeProduct(string $title, float $price) {
 3      return "$title: $price";
 4  }
 5  echo makeProduct(title: "Pen", title: 1.5);
                                     ^
Fatal error: Uncaught Error: Named parameter $title overwrites previous argument in main.php:5

title:を2回渡しているため、2回目がエラーになります。2つ目はprice:にする必要があります。

直し方: title を price にします。

この問題を解いてみる →

パターン3

 1  <?php
 2  function makeEvent(string $name, string $date) {
 3      return "$name on $date";
 4  }
 5  echo makeEvent(name: "Party", name: "2026-01-01");
                                    ^
Fatal error: Uncaught Error: Named parameter $name overwrites previous argument in main.php:5

同じname:を2回指定すると上書きとみなされエラーになります。2つ目のパラメータ名はdateにする必要があります。

直し方: name を date にします。

この問題を解いてみる →

パターン4

 1  <?php
 2  function makeBooking(string $room, string $date) {
 3      return "$room on $date";
 4  }
 5  echo makeBooking(room: "A1", room: "2026-02-01");
                                   ^
Fatal error: Uncaught Error: Named parameter $room overwrites previous argument in main.php:5

room:を2回指定すると、2回目が1回目を上書きしようとしてエラーになります。

直し方: room を date にします。

この問題を解いてみる →

パターン5

 1  <?php
 2  function makeInvoice(string $client, float $amount) {
 3      return "$client: $amount";
 4  }
 5  echo makeInvoice(client: "Acme", client: 99.5);
                                        ^
Fatal error: Uncaught Error: Named parameter $client overwrites previous argument in main.php:5

client:を2回渡しているため、2回目がエラーになります。

直し方: client を amount にします。

この問題を解いてみる →

よくある誤解

「後から指定した名前付き引数で上書きされるだけのはず」という思い込みは誤りです。PHPは意図しない上書きをバグの温床とみなし、実行時エラーとして止めます。

実務での勘所

典型的な発生パターンは、function greet($name, $greeting = "こんにちは")に対してgreet("太郎", name: "次郎")のように呼び出す場合です。最初の"太郎"は位置引数として1番目のパラメータ$nameに渡され、続くname: "次郎"という名前付き引数も同じ$nameを指しています。同じパラメータに2つの値を渡そうとしている以上、PHPはどちらを採用すべきか決められず、Named parameter overwrites previous argumentという分かりやすいメッセージ付きでエラーにします。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)