[PHP-users 16201]Re: case文での比較演算子について

Satoshi Fuke satoshi @ fromone.jp
2003年 6月 24日 (火) 19:52:18 JST


Fukeです。

Behalf Of HAMAI Kyoichi
Sent: Tuesday, June 24, 2003 5:30 PM
> fukeさんのと同じなのは。
>
> <?php
>  $i = $_GET[i];
>  if ($i<=20){
>   $size = 1;
>  }elseif ($i<=100){
>   $size = 5;
>  }else{
>   $size = 10;
>  }
> ?>
そうですね。ただ、ifの3分岐はelseを使うと見通しが悪くなるときがありますね。
<?php
  $size = 10;
  if ($i<=100){ $size=5; }
  if ($i<=20) { $size = 1; }
?>
この方法はもっとわからなくなりそう(^ ^;

本題からそれますが、型がの扱いがどうなってるか
ちょっと気になりましたので、以下のソースで確認しました。
<?php
 $i = $_GET[i];
 $str = true; //$str = 1; $str="1"; と入れ替え
 switch($str){
  case ($i<=20):
   $size = 1;
   break;
  case ($i<=100):
   $size = 5;
   break;
  default:
   $size = 10;
 }
 echo "その1:サイズは $size です<br>";
 $size = 10;
 if ($str===($i<=100)){ $size = 5;}
 if ($str===($i<=20)){ $size = 1;}
 echo "その2:サイズは $size です<br>";
?>
結果:
$str=trueのとき:どちらも正常動作
$str=1のとき:caseの動作は$str=trueと同じ。if文は引っかからず。
$str="1"のとき:caseの動作は$str=trueと同じ。if文は引っかからず。
ifの方は型チェックしてるので当たり前として、
caseの動作は if ($str==($i<=100)) と等価な動きをしますね。

話がそれちゃいましたが、今回のケースの場合(目盛り間隔の算出)、
私は計算式作ると思います。
-----
冨家 聡(Satoshi Fuke)
E-mail: satoshi @ fromone.jp
FROM ONE Co.




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