名前付き引数 ~プログラム研究室~


 こんにちは!
 ナビゲータのEVEです。
デスクワーク.jpg
 今日も、PHPから引数に関する情報です。
 PHP8になってから、JIT(Just-In-Time)をはじめとして、かなりいろいろな機能が追加されたようです。その中から本日は、名前付き引数について御紹介しましょう。

[名前付き引数]
 PHP8.0から、名前付き引数が利用できるようになりました。どういうことかというと、呼び出し元で、どの変数にどの値を引数として渡すのか明示できるようになりました。以下がその例です。

function createUser($name,$age,$isAdmin = false) :false|string{// 処理}// 名前付き引数を使って引数の順番に関係なく渡せるcreateUser(age: 25,name: "Alice",isAdmin: true,);

以上は、createUser関数を定義し、その定義した関数を呼び出しているという2つのプログラムを例示しています。そこで注目して欲しいのは、呼び出し元の記述です。なんか、普通の呼び出し方ではありませんよね?

関数名(変数名1:実引数,
変数名2:実引数,
変数名3:実引数,
);

変数名の後にコロンを記述し、その変数というか呼び出される側からすると、引数と言うことになるのですが、その後に実数を記述することができるようになりました。これにより、引数が多く、どの引数に何を渡したのかわかりにくいという問題が解消されました。気をつけなければならないのは、変数名に$をつけてはいけないということです。
 当プロジェクトの場合、引数が多くなったら、同引数は配列で渡すことにしているので、あまり関係ないのですが、それは1人で作っている場合限定です。多分、人数が多くなってきたら、助かる機能となるでしょう?
 名前付き引数は利用しなくても、記述できるのですが、これは、規約に追記し義務とした方がいいでしょう?

[引数の最後のカンマ]
 トリビア的な話なのですが、呼び出し元の最後に余計なカンマがあるって思いました?赤くマーキングしているので、気づいたと思いますが、これ、トレーリングカンマと言われるモノです。
 この機能、PHP7.2から追加されました。以上のサンプルプログラムは、予め引数の個数が分かっているので、トレーリングカンマを利用するメリットをあまり感じられませんが、プログラムの中で、配列を生成する場合など、その中の要素が、事前にいくつか分かっていない場合があります。その場合、従来は最終の要素を検出し、その最後の要素にはカンマを付けないといった配慮が必要だったのですが、その必要がなくなりました。その前の要素と同様に最終の要素にもカンマをつけることができるのです。
 今、関数の引数と、配列について話しましたが、どんな場面で利用できるのか、ChatGPTにすべて列挙してもらいましょう!

 
❶配列リテラル(PHP7.2~)
❷配列の展開(スプレット文)(PHP7.4~)
❸関数の呼び出し(PHP7.3~)
❹関数定義(PHP7.3~)
❺use宣言(クロージャー)(PHP7.3~)
❻名前付き引数(PHP8.0~)
❼クラス継承リスト(PHP8.0~)


[あとがき]
 以上の機能は、当プロジェクトで採用し、以降作るプログラムは適応対象となります。但し、トレーリングカンマですが、現時点は配列のみ適用しようと考えています。当プロジェクトで作るプログラムにおいて、それ以外のものは、プログラム内でゴリゴリ作ることがないと思われるからです。
 規約等が出来上がりましたら、pro2grammer.comに掲示していきますので、ご確認ください。
 では、また!!!

コメント