nullと0
if($obj) {
$obj->getId();
}
的なコードを良く書くけど、そのままのノリでnull じゃない時これやる、ってコードを書いていたら0が代入された時にバグってしけた。
// hoge=0 $param = Request::getParameter('hoge', null); if($param) { // ここに来る! hoge(); } else { // ここに来てくれるつもりだった。 foo(); }
// hoge=0 $param = Request::getParameter('hoge', null); if($param !== null) { hoge(); } else { // $paramが0のときちゃんとここに来る foo(); }
こうしておいたけど、普段はどうしたらいいんだろ。$obj === null か is_null($obj) 使うように癖つけておいたほうがいいのかなーーーーなやみ
空判定
$array_obj = HogeModel::getObjects();
$obj = HogeModel::getObject();
if ( count($obj_array) > 0 ) {}
if ( $obj instanceof Obj ) {}
if ( $obj ) {}
とかを"データ取れなかった時" 判定したいときに使っているのを見たことある。
$obj === null が、どの場合でも上手く動いてくれる危険が少ない判定なのかな。
まぁでも空の配列返すようなメソッドだと null === array() だとfalseなので自分が使うメソッドがどういう値を返すのかを見てコーディングすることは必要。
$hoge = array(); if($hoge === null) { echo "null"; } else { echo "no null"; }
ちょっと考えてまとめ
nullアクセス防止なら
オブジェクトにアクセスできなかった時のnull落ちを防ぐだけならif($obj){} 判定が一番スマートだと思ってる。
0が入ってくる可能性がある場合は
プリミティブ型の時はif($primitive !== null) かisset() 使って、オブジェクト型の時はif($obj) {} つかお。