最近知ったif文の話。

本当に勘違いしていたので、まとめる

PHPでは 0がfalseで判定されるらしい

  if ( 0 ){
    echo 'true';
  } else {
    echo 'false';
  }

では false が表示されるわけだが、

最近cakePHPを仕事で使っていて

if ($result = TableRegistry::get('User')->save($data)){
  echo 'save done';
} else {
  echo 'error';
}

というプログラムを書いていた時、

このifの評価が行われる()の部分では、 $result に TableRegistry::get('User')->save($data) の無いようがきちんと代入されるのか
という所を判定していると思い込んでました。

TableRegistryのSaveがうまくいかなかった時、 false が返されるはずなので error が表示されるのは理解してたんですがね…(?)


なぜ気がついたかというと以下のコードを素で書いてしまってました。

  if($x = array_search($v , $array)){
    # code ...
  }

このarray_searchで 0 が返った時、真偽値はfalseとなるため、動作しないというバグでした。

3,4年ぐらいプログラム書いてるけど、これに今まで気が付かなかったしやっぱりまだまだ未熟だなと感じました。