PHP8.0.0の「名前付き引数」について調べてみた

 2020年の11月ですから、ちょうど一年半ほど前の話になりますが、Web開発で使用されることの多いスクリプト言語「PHP8.0.0」がリリースされました。前回のメジャーアップデートから実に5年ぶりということもあって、関係者からかなりの注目を集めたことはまだ記憶に新しいところです。
 当然ながら不具合の修正だけでなく新しい機能が追加されました。たとえば「JITコンパイラー」の機能追加であったり、Union typesの機能として複数の型定義が可能になったり、あるいはデータのNullチェックを「?->」演算子で行える機能が追加されたり、ほかにも多くの機能が追加されました。
 1年ほど使ってみてその効果をいろいろと実感できるところもあり、今回はその中から「名前付き引数」について紹介してみたいと思います。

 

名前付き引数とは?

 これまでは順番に基づいて引数を記述していましたが、名前付き引数ではその名のとおり、順番ではなく名前ベースで引数を記述することができるようになりました。

使用例

 次のような関数を使用する場面を考えてみます。

function hoge($hoge = null, $fuga = ‘*’, $moge = ‘default’) { /* … */ }

 3番目の引数だけ指定し、他の引数はデフォルト値でよい場合でも、今までは途中の引数を省略することはできませんでした。そのため、ドキュメントでデフォルト値を調べて指定する必要がありました。

例) 順番による引数指定

hoge(null, ‘*’, ‘value!!!’);

 名前付き引数では、引数の順序を自由に記述できます。それにより、デフォルト値を持つ引数を、順番によらず省略することができるようになりました。

例) 名前付き引数による引数指定

hoge(moge: ‘value!!!’);

 名前付き引数では、「名前: パラメーター」の形式で引数を記述します。
 引数を順番に指定する場合と比べると、それぞれの引数が何を示すのかが明白です。組み込み関数とユーザー定義関数のどちらも記述方法は同じです。

位置を指定した引数と名前付き引数を組み合わせる

 名前付き引数と、位置引数を組み合わせることもできます。
 位置を指定した引数の後に、名前付き引数を記述します。

例) 位置引数と名前付き引数の組み合わせ

array_fill(0, count: 6, value: ‘*’);

 名前付き引数のあとに位置を指定した引数を記述するとエラーになります。

例) エラーになる記述(名前付き引数のあとに位置を指定して引数を使用する)

array_fill(start_index: 0, count: 6, ‘*’);
array_fill(0, count: 6, ‘*’); // こちらもエラーとなる

 名前付き引数と位置を指定した引数を組み合わせることはできますが、記述が若干わかりづらいものになります。一箇所の関数呼び出しにおいては、どちらか一方に表記を統一することがよさそうです。

———————————

 ということで、今回はPHP8.0.0で導入された「名前付き引数」を取り上げました。 シンプルな機能ですが、可読性を向上できますのでぜひ活用していきたいですね。
 他にもPHP8.0.0以降で導入された便利な機能がたくさんありますので、 機会があればその他のものについても紹介してみたいと思います。

■関連リンク

→制作実績 Web/システム開発
https://www.qbist.co.jp/works/web_appli.html

→Webサイト/システム開発等でお悩みでしたら、 ぜひ当社までお気軽にご相談ください。
https://www.qbist.co.jp/contact/index.html

関連記事