PHP初学注意(二)

1648 ワード

1.==比較演算子
前編で===と==の質問をしたのを覚えています.当時は、===まだタイプが同じだった.しかし、いったいどうなっているのだろうか.比較演算子は2つの値タイプを変換できることを知っているからです.栗を挙げると、1つの数字と文字列を比較すると、文字列は数字に変換されて比較されます.===演算子は例外で、タイプ変換は行われません.栗をもう一つ挙げます.例えば、メールアドレスで@記号のアドレスを検索すると、この演算子が使えます.コードは次のとおりです.
 
1 <?php

2 if(strpos($_POST['email'],@) === false){

3     echo "    E-mail  ";

4  }

5 ?>

 
strpos関数は、最初の出現時の下付き文字を返し、出現しなければfalseを返します.しかし、====ではなく==で使用すると、文字が最初の位置に表示されると0という問題が発生します.0をfalseと比較するとfalseは0に変換され、結果は間違っています.だから私たちは===でこの判断を完成します.!==同じ効果です.
2.浮動小数点数の比較
システムのせいで浮動小数点数の精度は限られている.いくつかの操作を経た後、精度の誤差は特に大きい.最後に関数floor((0.1+0.7)*10)の結果は0.8ではなく0.7になる.機械内部の表示では、(0.1+0.7)*10は7.999999…ですから.だから、「浮動小数点数の結果が最後の1位に正確になったとは信じないで、2つの浮動小数点数が等しいかどうかを比較しないでください」という言葉を覚えておいてください.しかし,一定の精度で2つの浮動小数点数を判断することを試みることができる.例えばこの判断文
if(abs($a - $b) < 0.000001)
つまり、差の比較です.
関数bccomp(比較数、比較数、比較ビット数)も使用できます.
例えばbccomp('2.23456','2.23457',3)は0(等しいことを示す)を返し、
bccomp('2.23456','2.23457',5)は-1を返します(右が左より大きいことを示します).
最後にintval()関数も使用できます.まず浮動小数点数を拡大し,この関数で強制的に整数変数に変換してから比較する.