こんにちは!
ナビゲータのEVEです。
独習PHP第4版を13日ぐらいで読破しようと考えていましたが、まだ読み終えていません。Studyingの資料整理に時間を取られたということもあるのですが、思った以上に知らないことが多い・・・。
価格:3740円 |
昔は、変数の型の管理はゆるかったのですが、それが厳しくなり、構造化プログラミングから本格的なオブジェクト指向言語となりと大きく変わってきました。その大きく変わってきた部分に対応してきたつもりなのですが、まだ、足りていないようです。
その足りていないと思われる知識について、Prototype EVEのKnowlegeシステムへ情報として整理しています。読むだけなら、もうちょっと早く読み終えることができそうなのですが、知識として定着させるために、じっくり読むことにしました。
PHP8から出てきた、matchについてご紹介しましたが、今後もこの場でご紹介していきたいと思います。
では、今回は、PHP7から機能として追加された、引数、返却値の型指定について見ていきましょう!
[引数と返却値の型指定のなぜ?]
PHP7から、引数と返却値の型指定ができるようになりました。理由を考えると、Prototype EVEのロジックから推測することができます。Prototype EVEは、PHP5.3で製造しているのですが、作った関数の頭で、引数の型を指定というか変換しています。これは、作った関数の多くは、PHPから提供されている組み込み関数を利用しているのですが、受け取った引数が組み込み関数で指定されている型なのかどうか、あやしいところがあったのです。それは、長い期間に、多くのプログラムを作ってきたのが理由なのですが、多分、以上のことはPHPを製造をしているプロジェクトメンバも認識していたのではと想像しています。
[引数と返却値の指定方法]
引数と返却値の型指定は、実際にどうやっているのかみていきましょう。
public function testStr (❶int|string $arg1,
❷?float $arg2,
❸array $arg3= []):❹?array
{
・
・
・
・
}
以上が例なのですが、❶❷❸が引数とその型で、❹が返却値の型です。
❶から見て行きましょう。❶では、$arg1という引数を指定していますが、その引数の型は、int型またはstring型だと明示しています。「|」は論理和を表現しています。返却値ではこのような指定ができるということは想像できるのですが、引数は想像できませんでした。
❷では、float型に?が指定されています。これは、$arg2は、引数として指定されているときは、float型なのだが、指定されない可能性もあり、その場合はnull型として扱われます。トリビア的な知識ですが、PHPでは、double型は利用できますが、float型として扱われます。Javaで利用するdoubleのつもりでプログラミングしていると、バグを作りこむことになるので、注意が必要です。
❸では、array型の引数が指定されています。しかし、「= []」としていますが、これは、$arg3に呼び出し元で何も設定していない場合、配列に初期化されるという記述になります。
ここでは、配列で例示しましたが、他の型でも同様なことができます。
❹では、返却値の型を指定しています。ここでは、arrayを指定していますが、「?」がついています。これは、引数同様に、返却値に配列が指定されていなかった場合、nullを返却します。
なお、ここでも論理和を利用することができますが、その場合は、「?」は利用できません。
[あとがき]
意外と奥が深いと思いません?ChatGPTとの対話のとき知った機能だったのですが、その時はここまでの機能だとは思っていませんでした。なお、プログラム内で利用できる型は引数としても利用できるようです。
以上は、PHPの構造的な部分について書いていますが、同時並行的に、組み込み関数についても、Knowlegeシステムへまとめています。自分が以前から知っている関数であるにもかかわらず、ChatGPTでデバックすると、機能として知らないものが多くあります。進化したのか、知らなかっただけなのか、そこまで調べていないのですが、その知識整理のためにやっています。そちらの方は、全体のスケジュールには影響しません。
なお、調べている途中で、いいサイトを見つけました。PHPの開発チームが作ったリファレンスサイトです。以下にURLを載せておくので、参考としてください。
では、また!
■PHP マニュアル(公式サイト)
https://www.php.net/manual/ja/