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を指定する必要があります。

直し方: nameage にします。

この問題を解いてみる →

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

パターン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:にする必要があります。

直し方: titleprice にします。

この問題を解いてみる →

パターン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にする必要があります。

直し方: namedate にします。

この問題を解いてみる →

よくある誤解

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

まとめ

同じ名前付き引数を2回指定すると Named parameter overwrites エラーになるは上級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

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