PHP 否定論理、比較演算 不思議に見えて、厳密じゃない式

津路です。久しぶりに投稿します。
最近、CGI+PerlからPHPに変換する機会がありまして、ウェブツールでざっくり変換していたのですが、問題が起こったため、投稿します。
ワーニングもエラーも、VS CODEでは出ないものの、そのまま走らせると、期待通りに行かない。
そのたびに、なぜなに?と考えてしまいます。
例えば、データベースから取得した件数が0なのか比較する場合、
1 2 3 4 5 6 7 8 9 10 11 12 | $rowCount=$query->rowCount(); if($rowCount==0){ echo 'true';} else {echo 'false';} if($rowCount < 1){ echo 'true';} else {echo 'false';} if($rowCount > 0){ echo '1';} else {echo '0';} if($rowCount==0){ $response = new Response(); $response->setHttpStatusCode(401);//not authorized $response->setSuccess(false); $response->addMessage('username or password is incorrect'); $response->send(); exit; } |
と書いた場合、$rowCount=1の場合でも、==0では、trueになったりします。はあ?といろいろやってると、これは、$rowCount == 0でようやく、falseになりました。
C言語やVBAなどでは、空白無しでいけるんで、つい書いちゃいます。
これまた数値なのですが、if(!$val[‘itemno’])とかif($val[‘itemno’]>=1)なんて書いてしまって、そのまま放置すると、走らせたときに、!で”の場合にtrueとなると考えていると、ダメだったりします。PHP8です。
ですので、必ずIntValで変換することにしました。
また、Postmanなどから数値を投げる場合も、数値を文字列にするかどうか、受け側に合わせないとだめでした。
コメントを残す
コメントを投稿するにはログインしてください。