Lapis Lazuli

technical blog for web developer

【PHP】8.0で名前付き引数が使えるようになるかも

PHPの次のバージョンである8.0で遂に名前付き引数が使えるようになるみたいです。(まだ確定ではありませんが)
これはかなり強力なアップデートなのではないでしょうか。開発効率が爆上がりです(個人差あり)

そもそも名前付き引数って?

かなりざっくりと言うと、関数の各引数にタグをつけるような機能だと思ってもらって問題ないです。

これがあると何が便利かというと・・・

  1. 引数の順番を覚えなくて済む
  2. 引数の意味を覚えなくて済む
  3. デフォルト引数があってそれを使う場合、わざわざ引数を渡さなくても済む

というメリットがあります。
とくに1番目のメリットは大きいかなと思います。PHPは引数の法則に統一感がないので・・・覚えていない限り毎回調べる事になります(体験談)

書き方を解説すると

他の言語に似た感じでの実装になるみたいです。
呼び出し方は下記のとおり。

in_array(needle: $a, array: $b);

配列内を検索するin_array関数を例にだしましたが、上記のように書きます。
引数の中にタグみたいなものを入れてますね。これで何を渡しているのかがひと目で分かる形になります。

これの威力を発揮するのは次のように書いた時です

in_array(array: $b, needle: $a);

上記のように逆にかいてもちゃんと動くようになります。なのでいちいち引数の順番を覚えてなくても問題ない訳です。素晴らしい。

あと名前がついているので、引数の意味が分かりやすくなって可読性が上がります。
arrayってついていたら「これは配列を渡しているんだな」ってひと目で分かりますよね。

これはデフォルト引数が存在する場合も同じです。
例えば

kansuu(1, null);

function kansuu($number = 0, $number2 = null) {}

デフォルト値を第2引数だけ変更したいという場合、他の引数にもデフォルト値を渡してあげてないといけません。
これ2つだけならともかく、4つも5つもあった場合面倒ですよね。
これも名前付き引数になると、

kansuu(number: 1);

function kansuu($number = 0, $number2 = null) {}

これだけで済む訳です。便利ですね。

まとめ

ということで今回は珍しくPHPの記事にしてみました。なぜなら名前付き引数が実装されると知って、「おっ!」と思ったからです。
個人的に不満だったのが引数の統一感のなさだったので・・・これで弱点が一つ消える感じになりますね。
8.0というメジャーバージョンアップに相応しい変化だと思いました。