業務でPHP8を使ったサービスを開発しているのですが、PHP8の名前付き引数を使ってます。 もともと先輩が書いていたコードに名前付き引数があったので、見様見真似で使い始めたのですが、プログラムが格段にわかりやすくなりました。
名前付き引数はPHP8から追加された機能なのですが、かなり便利であることがわかったので、紹介します。
基本的な使い方
関数の引数が受け取る変数名を、名前付き引数として指定します。 基本的な使い方はこれだけであり、とても簡単です。
<?php function test(int $a, int $b, int $c = 3) { return $a + $b + $c; } echo test(a: 1, b: 2);
なお、特別な準備は必要なく、PHP8であれば使えます。
名前付き引数のメリット
名前付き引数のメリットはいくつもありそうですが、ここでは3点ほど紹介します。
リーダブルコードのテクニックが不要になる
リーダブルコードには、関数の引数に、コメントを付けて補足するテクニックがありました。 ハードコードされた10やfalseが、何を示すのかコメントするほうがわかりやすいからです。
// 引数にコメントをつけて関数を呼び出す
Connect(/ timeout_ms = / 10, / use_encryption = / false);
引用: https://msyksphinz.hatenablog.com/entry/2017/11/21/020000
名前付き引数の登場によって、リーダブルコードのテクニックなしで、各引数の正体をプログラムに記述できるようになりました。
引数の順番に左右されない
今までのPHPでは、引数の順番が重要でした。 ところが、名前付き引数は順番に左右されないため、cから先に書くこともできます。
<?php function test(int $a, int $b, int $c = 3) { return $a + $b + $c; } echo test(c: 1, b: 2, a: 1);
連想配列(ハッシュ)が展開できる
連想配列を、名前付き引数として展開できます。
<?php function test(int $a, int $b, int $c = 3) { return $a + $b + $c; } $hash = ['a' => 1, 'b' => 2]; echo test(...$hash);
注意点はいくつかあるものの、展開後に任意の引き数を追加することも可能です。
<?php function test(int $a, int $b, int $c = 3) { return $a + $b + $c; } $hash = ['a' => 1, 'b' => 2]; echo test(...$hash, c: 6);
まとめ
関数呼び出しで引数の正体を書けるようになったため、関数を使ったプログラミングが格段にわかりやすくなりました。
私は特に、リーダブルコードのテクニックがひとつ不要になった点が気に入っているので、今後も活用していきたいです。