初期値が入っている関数に新たに変数を追加するときの注意点(PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function)
実施したいこと
元々用意していた関数では機能が足りなくて、変数を追加したい状況はよくあると思います。
以下の関数に新しい変数$var_eを追加する場合を例に考えます。
元々の関数
function hogehoge($var_a = 1, $var_b, $var_c, $var_d =10){ }
関数を使用するコード
$var_a = 1; $var_b = 2; $var_c = 3; $test_value = hogehoge($var_a, $var_b, $var_c);
エラーが発生したコード
引数を追加した関数
function hogehoge($var_a = 1, $var_b, $var_c, $var_d =10, $var_e){ }
変数を追加したコード
$var_a = 1; $var_b = 2; $var_c = 3; $var_c = 4; $test_value = hogehoge($var_a, $var_b, $var_c, $var_e);
発生したエラー「PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function hogehoge()」
引数が少ない?ちゃんと関数を呼び出す側でも引数は渡しているんだけど…
修正したコード
修正した関数
function hogehoge($var_a = 1, $var_b, $var_c, $var_e, $var_d =10){ }
関数を使用するコード(特に変更なし)
$var_a = 1; $var_b = 2; $var_c = 3; $test_value = hogehoge($var_a, $var_b, $var_c, $var_e);
関数側の引数の順番を変更することで無事動作しました。
結論
「関数側で引数の初期値を持たせていて、呼び出す側で変数を渡さない」場合、関数側の引数の順番に注意する必要があります。変数を渡さない引数に関しては、関数の最後に設定しましょう。
関数は引数に初期値が入っているかを意識せず、記載順に頭から変数が入っているかを確認していくようです。今回の場合だと、4番目の引数まで値が入っているかを確認した後に5番目の引数が足りないぞ、とエラーを吐くようですね。