大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

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

株式会社クローバーフィールドの経営理念
著者:津路高広
公開日:2025/04/24
最終更新日:2025/04/24
カテゴリー:技術情報
タグ:

津路です。久しぶりに投稿します。

最近、CGI+PerlからPHPに変換する機会がありまして、ウェブツールでざっくり変換していたのですが、問題が起こったため、投稿します。
ワーニングもエラーも、VS CODEでは出ないものの、そのまま走らせると、期待通りに行かない。
そのたびに、なぜなに?と考えてしまいます。

例えば、データベースから取得した件数が0なのか比較する場合、

        $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などから数値を投げる場合も、数値を文字列にするかどうか、受け側に合わせないとだめでした。

    上に戻る