はじめに
PHP8では「名前付き引数(Named Arguments)」が導入されましたが、func_get_args()と組み合わせるとエラーになるケースがあります。本記事では、なぜFatal error: Unknown named parameterが発生するのかを、試験対策の観点から丁寧に解説します。
「func_get_args()は名前付き引数と共存できるのか?」という重要な理解ポイントを整理しましょう。
目次
◆ func_get_args()とは
func_get_args() は、
「関数に渡されたすべての実引数の値を、**配列(数値キー)**として返す」
関数です。
つまり、次のように呼ぶと、引数リストがそのまま配列として取得できます。
function hoge() {
$args = func_get_args();
var_dump($args);
}
hoge(123, '2nd');出力結果:
array(2) {
[0]=>
int(123)
[1]=>
string(3) "2nd"
}ここまでは問題ありません。
◆ 名前付き引数を使うとどうなる?
次に、以下のように名前付き引数で呼び出してみます👇
function hoge() {
$args = func_get_args();
var_dump($args);
}
hoge(str: '2nd', num: 123);◆ 実行結果
array(2) {
[0]=>
int(123)
[1]=>
string(3) "2nd"
}
Fatal error: Uncaught Error: Unknown named parameter $str ...◆ なぜFatal errorが出るのか?
理由はシンプルです。
名前付き引数は、「関数定義にその名前のパラメータが存在する」場合にしか使えないためです。
上記の hoge() 関数には $str や $num といったパラメータが定義されていません。
そのため、PHPは「そんな引数名は知らない!」としてエラーを投げます。
◆ 正しい書き方
関数にパラメータを定義した上で、名前付き引数を使いましょう👇
function hoge($num, $str) {
$args = func_get_args();
var_dump($args);
}
hoge(str: '2nd', num: 123);出力結果:
array(2) {
[0]=>
string(3) "2nd"
[1]=>
int(123)
}※ 呼び出し順に依存するため、順番は「str → num」となります。
そしてここでも、キーは名前ではなく 数値インデックス で返される点に注目です。
図解:func_get_args() × 名前付き引数の関係
┌──────────────────────────────┐
│ 定義されていない関数に str: を渡す │ → ❌ Fatal error
└──────────────────────────────┘
┌──────────────────────────────────────┐
│ function hoge($num, $str) {} │ → ✅ 実行可能
│ hoge(str:'2nd', num:123); │
│ func_get_args() → [0=>'2nd', 1=>123] │
└──────────────────────────────────────┘🧠 試験対策ポイント
| 覚えるべき項目 | 内容 |
|---|---|
| 名前付き引数の条件 | 関数に同名の引数が定義されている必要がある |
| func_get_args() の戻り値 | 値の配列(数値キー)で返される |
| 名前情報の扱い | 保持されない(キーは 0,1,2…) |
| 定義なしで名前付き引数を渡すと | ❌ Fatal error: Unknown named parameter |
| 試験での注意点 | 「func_get_args() は名前を保持する」と答えると誤り! |
まとめ
func_get_args()は関数に渡された引数の値リストを返す。- 名前付き引数は、関数側に同名の引数が宣言されていなければ使えない。
- 名前付き引数で呼び出すときは、関数側も
$str,$numのように宣言が必要。 - 試験では「名前付き引数とfunc_get_argsの共存」に関するひっかけに注意。
