by shigemk2

当面は技術的なことしか書かない

switch文で変数を使わず、trueを使う

switch文って普通は変数を使うと思うのですが

switch($hoge) {
case 1:
case 2:
case 3:
default:
  break;
}

みたいに。

でも、switchに変数を入れずにtrueとかを入れて、
caseでif文っぽい条件を入れることも出来る。

<?php
function hoge($a) {
  $length = strlen($a);
  $retval = null;
  switch(true) {
  case (! is_string($a)):
    $retval = "文字列じゃない";
    break;
  case ($length < 10):
    $retval = "10文字以下";
    break;

  case ($length > 10):
    $retval = "10文字以上";
    break;
  }
  return $retval;
}
print_r(hoge('hahaha'));

if-elseより可読性は向上するけども、ジャンプせずに1コ1コ徘徊していることに注意するべし。

追記: if-else も上から順番に評価される。C言語のswitchはジャンプする。