[PHP-users 32843] Re: if($input=="error")の不思議

KOYAMA Tetsuji koyama @ hoge.org
2007年 11月 10日 (土) 17:40:47 JST


小山です。

On Nov 10, 2007 5:00 PM, Kimio Mizuguchi <mizuguchi.kimio @ ytv.home.ne.jp> wrote:
> php5で次のような簡単なプログラムを作ったのですが、動作が期待と異なります。
> どうしてそうなるのかわかりません。
>
> <?php
> function isFailed($input){
>   if($input=="error")
>   {
>     return True;
>   }else{
>     return False;
>   }
> }
>
> if(isFailed(0)){
>   print("TRUE");
> }else{
>   print("FALSE");
> }
> ?>

文字列と数値を比較する場合、PHPは文字列を数値として解釈しようとします。

この例では
 ( 0 == "error" )
という比較になるわけですが、"error" を数値に変換して解釈しようとして
変換できずに 0 になります。

このような自動的な方変換による影響を避けたいのであれば、 == ではなく === 演算子
を用いるべきです。

PHPの値の自動変換の罠は、Dino の塙さんが詳しくまとめていらっしゃいます。

http://pukiwiki.hnw.jp/index.php?PHP%CA%D9%B6%AF%B2%F1%2F%A4%B5%A4%DE%A4%B6%A4%DE%A4%CA%C3%CD%A4%CE%C8%E6%B3%D3%C9%BD


-- 
    小山哲志@ビート・クラフト
    koyama @ beatcraft.com
    koyama @ hoge.org


PHP-users メーリングリストの案内