【PHP】複数の引数にデフォルト値を持たせる方法と注意点

こんにちは。いっとくです!

先ほど電車に乗っていたら、突如おならのニオイが漂ってきました。

すると前の人が「君だね?」みたいな目でこちらを見てきたのですが、「違うよ?」という目で見返したので、多分誤解は解けたと思います。

そんな本日はPHPの引数に関するお話。

関数やメソッドを作る際、以下のように引数を持たせることができますよね。

<?php

function addition ($value1, $value2)
{
    return $value1 + $value2;
}

echo addition(6, 8); // 14

関数を呼び出す際に、設定した引数よりも渡す値が少ないとエラーが発生します。

逆に多かった場合、エラーは出ず余計な部分が完全に無視されます。

<?php

function addition ($value1, $value2)
{
    return $value1 + $value2;
}

echo addition(9);        // Uncaught ArgumentCountError
echo addition(1, 1, 10, 100, 100, 1000000000000); // 2

でも余計に引数を渡すメリットなんか特にないので、個数はちゃんと合わせましょう。笑

そしてこの引数ですが、値が渡されなかった時に入れるデフォルト値を設定することができます。

<?php

function addition ($value1 = 1, $value2 = 2, $value3 = 3)
{
    return $value1 + $value2 + $value3;
}

echo addition(); // 6

このようにデフォルト値を設定すると、引数の個数が減ってもエラーが出ません

<?php

function addition ($value1 = 1, $value2 = 2, $value3 = 3)
{
    return $value1 + $value2 + $value3;
}

echo addition(4, 5); // 12 (4 + 5 + 3が行われている)

引数は左側から当てはめられるので、$value1に4が、$value2に5が代入され、$value3はデフォルトの3が入ります。

そして、複数の引数がある場合のデフォルト値の設定について注意点が一つあります!

複数の引数のうち一部の引数だけにデフォルト値を設定するということができるのですが、その際は以下のようにデフォルト値を設定する引数を他の引数よりも右側に書きましょう。

<?php

// デフォルト値がある引数は右に書く!!
function addition ($value1, $value2, $value3 = 3) 
{
    return $value1 + $value2 + $value3;
}

echo addition(4, 5); // 12

これを左に書いてしまうと、意図した動きになりません。

<?php

// デフォルト値がある引数は右に書く!!
function addition ($value1 = 3, $value2, $value3) 
{
    return $value1 + $value2 + $value3;
}

echo addition(4, 5); // Uncaught ArgumentCountError

というのも引数は左から順番に当てはめられるので、上記の例だと$value1と$value2に値が当てはめられ、$value3が空になってしまいます。

すると引数足りんぜ!?と怒られてしまうわけです。

きちんと3つ引数を渡してあげればエラーが出ることもなく、ちゃんと動くのですが、それってもはやデフォルト値を設定してる意味がないよね!?っていうことなので、デフォルト値を持つ引数と持たない引数が混在する場合は、デフォルト持ちの引数を右に書きましょう。

というか、引数が左側から当てはめられていくことさえ知っていれば、覚えていなくても感覚的にわかるはず!

以上、複数の引数のうち特定の値にのみデフォルト値を持たせる方法とその注意点でした!

ちなみに引数関係で型宣言を使うことのメリットについても記事を書いているので、型宣言のメリットが全然わからん!とかそもそもそれなに!?っていう人はこちらも参考にしてみてください!

こんにちは。いっとくです! 都内でWebエンジニアやってまっす! プログラミングってすごく奥深いな〜と思うことがあって...

さよなら!

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする