[PHP] 暗黙の変換にはまる | A Day In The Boy's Life

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

ずっと特定の言語を使っていたら、それに慣れてしまってあまり細かいルールを気にしなくなるのですが、その考えが落とし穴になってしまったケース。


PJに参画してもらったJava使いの子にプログラム作らせたら無限ループを引き起こしました。

その記述は下記


for ($i = 0; i < count($value); $i++) {

※ forループの終了条件の変数に$iではなく、単に「i」という文字を指定

  どうも変数に「$」をつける習慣になれないらしい。


何故これが無限ループになるかと言うと・・・下記参照


■[PHP] 0=="value is not zero!" @ nazonoDiary(日々うろおぼえ記)


つまりは・・・


for ($i = 0; 0 < 1; $i++) {

のように暗黙的に変換されてたため、無限ループになってしまう。


実験してみたければ


$a = "hoge";
$b = (int) $a;

echo $b;

と書いて実行してみたらよい。

「0」が出力されます。


ただし、


$a = "10hoge";
$b = (int) $a;

echo $b;

とかすると、「10」が返って来るからタチが悪い。

なぜかといわれれば、それがPHPの仕様ですとしかいいようがないのだけれど・・・。