PHPの型名が難しすぎ

高木です。おはようございます。

現在、新しい書籍の執筆に精を出しています。
何とか年内にはリリースしたいと考えていますが、書籍を作るには原稿を仕上げるだけではダメなので、全工程が間に合うかどうか若干の不安もあります。
とにかく今は脱稿を目指すしかないので、執筆に全力を尽くすつもりです。

執筆中の書籍について具体的なことは今の段階では書けません。
ただ、PHPが絡んでいることだけは確かです。
私がこれだけPHPについて大きく扱った書籍を書くのは初めてです。

PHPというプログラミングん言語では、世間では簡単に習得できるようにいわれています。
しかし、私にいわせれば、C言語なんかよりずっと複雑で難解です。
きっと、深掘りしなければ何となく書けてしまう言語ということなのかもしれません。

今回の話題はそんなPHPの型名についてです。

もしかすると、PHPには型がないと考えている人がいるかもしれませんね。
実際にはPHPには型があります。
もともと静的な型がなかったのですが、最近では静的な型付けが段階的に導入されています。

PHPにはboolean型、integer型、float型などがあります。
それは構わないのですが、それぞれの型名が文脈によってバラバラで、混乱せずにはいられません。
話を簡単にするために、今回は上記の3つの型についてだけ話をすることにします。

gettype関数が文字列として返す型名は、それぞれ”boolean”、”integer”, “double”です。
なぜかfloat型が”double”という名前になっています。
これには歴史的な経緯があるらしいのですが、私にはよくわかりません。

ちょっと面喰いますが、まだ許容範囲です。
なぜなら、PHPのキャスト演算子は、boolean型にキャストする場合は(bool)または(boolean)、integer型にキャストする場合は(int)または(integer)、float型にキャストする場合は(float)または(double)だからです。
float型へのキャストに(double)がありますので、gettype関数が”double”を返すのはまだ許せます。
そもそも論でいえば、同じ意味のキャスト演算子なのに複数の表現があることには納得がいきませんが、どちらでもよいのあれば大きな混乱はないでしょう。

ところで、PHPの関数定義では、以前は仮引数の個数と名前ぐらいしか指定していませんでした。
しかし、最近では仮引数の型や返り値の型を指定するようになっています。
仮引数や返り値の型指定では、boolean型はbool、integer型はint、float型はfloatと記述しなければなりません。
booleanやintegerやdoubleと記述するとエラーになるのです。

さすがにこれは許容範囲を超えています。
こんな複雑で難しい仕様を理解して使いこなすのは至難の業です。
私も何度も罠にはまりながら、ようやく使えるようになってきましたが、いまだに油断すると失敗します。

何度も書きますが、こんなに難しい言語を使いこなしているPHPプログラマーには敬意を払わずにはいられません。