値にはタイプがある

ここでちょっと変わった実験をしてみましょう。数字とテキストを計算して表示させるという実験です。

これをブラウザで開くと、「10+20=30」と表示されます。が、ちょっと奇妙な感じがしませんか?$xは10という数字ですが、$yは”20″というテキストなのです。$zでは、数字とテキストを足し算しているわけです。更に、数字もテキストもすべてドットでつなげて表示させています。

こんなスクリプトが全く問題なく動くのは不思議な気がしますね。その秘密はPHP自身にあります。PHPには、必要に応じて値のタイプを自動的に変換する機能があるのです。

プログラムの中で扱われるさまざまな値は、「タイプ(型)Jと呼ばれる種類分けがされています。数字やテキストというのは値の性質そのものが全く違いますから、それぞれプログラムの内部での処理も異なってくるのですね。ですから、一般的なプログラミング言語では、テキストを数字として扱ったり、反対に数字をテキストとして扱うことはできないことが多いのです。そのような場合は、専用の関数や命令などを使って値を変換するのが普通でした。

が、これでは面倒ですし、こうした「値のタイプ」を使いこなすためには、さまざまな値がコンピュータの内部でどのような形で扱われているのかといったことまで知らないといけません。そこでPHPでは、こうしたややこしい部分を開発者が意識しないで済むようにしているのです。

その値が数字であれテキストであれ、ある文の中で「数字として値が必要になった」ときにはすべて整数や実数の値に変換されます。逆に「テキストとして値が必要」というときには自動的にテキストに変換され扱われるのです。

もちろん、中には「そのまま変換できない」というケースもあるでしょう。例えば”ABC”というテキストが変数に入っているときに、これを足し算しようとしたら?どう考えても”ABC”は数字にはなりませんね?そういう場合は、PHPは10と判断します。つまり、無理やり数字にしてしまうのです。また”100DC”なんて数字で始まるテキストなどは、数字として必要になったときには最初の100だけを見て100という数字だ」と判断します。このように、無理やりにでも値を変換して動かしてしまうのがPHPの特徴です。

ただしこれをPHPの長所であると考えてはいけません。逆に「欠点である」ともいえるのです。PHPでは、このようにどんな値でも変数におさめることができ、どんな値でも計算などに使うことができます。このため、「値にタイプがある」ということとその意味についてあまり考えることなくプログラミングを行うようになりがちです。また、本来予想していたのとは違う値を誤って使ってしまっても、無理やり必要な値に変換して動いてしまうため、トラブルが起こっていることがわかりにくくなるきらいもあります。PHPでは値のタイプを考えなくてもスクリプトが書けてしまいますが、実際には知らないと図ることが多々あります。