ArgumentCountError: Too few arguments passed の原因と直し方
関数が必要とする数より少ない引数しか渡さなかったときに出るエラーです。デフォルト値の無い引数を省略すると、PHP8では実行時エラーとして止まります。
エラーメッセージの読み方
Fatal error: Uncaught ArgumentCountError: Too few arguments to function greet(), 0 passed in main.php on line 5 and exactly 1 expected in main.php:2
main.php- ファイル名
2- 行番号 — 実際にクラッシュした行
ArgumentCountError- 例外クラス — 何が起きたか。ここを検索するのが最短です
Too few arguments to function greet(), 0 passed in main.php on line 5 and exactly 1 expected- 内容 — どの値が問題だったか
このエラーが出る典型パターン
パターン1
1 <?php 2 function greet(string $name) { 3 echo "Hello, $name\n"; 4 } 5 greet( ); ^
Fatal error: Uncaught ArgumentCountError: Too few arguments to function greet(), 0 passed in main.php on line 5 and exactly 1 expected in main.php:2
greet()はデフォルト値の無い$nameを必須にしています。引数を渡さないとArgumentCountErrorになります。
直し方: (空) を "Al" にします。
広告
広告スロット(未設定)
パターン2
1 <?php 2 function total(int $a, int $b) { 3 return $a + $b; 4 } 5 echo total(5 ); ^
Fatal error: Uncaught ArgumentCountError: Too few arguments to function total(), 1 passed in main.php on line 5 and exactly 2 expected in main.php:2
totalは2つの引数を必須にしていますが、1つしか渡していません。ArgumentCountErrorが投げられます。
直し方: (空) を , 3 にします。
パターン3
1 <?php 2 function makeUser(string $name, int $age) { 3 return "$name is $age"; 4 } 5 echo makeUser("Al" ); ^
Fatal error: Uncaught ArgumentCountError: Too few arguments to function makeUser(), 1 passed in main.php on line 5 and exactly 2 expected in main.php:2
$ageにはデフォルト値が無いため省略できません。省略するとArgumentCountErrorになります。
直し方: (空) を , 20 にします。
よくある誤解
「足りない引数はnullで自動的に補われるはず」という思い込みは誤りです。デフォルト値が定義されていない引数を省略すると、ArgumentCountErrorとして致命的エラーになります。
まとめ
ArgumentCountError: Too few arguments passedは中級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。