アフィリエイト広告を利用しています

PHP fatalって0だったんですか? 'fatal' == 0が成立しました。

if( $sts == 'fatal' ){
エラー処理
}
とか、よくあるソースコードかと思います。

$stsは正常系(数値)と異常系(fatal)を混在させていました。

これ、実は、以下ソースコードだとエラー処理が成立します。
$sts = 0;
if( $sts == 'fatal' ){
エラー処理  <=ここに来ます。
}

まじですか?文字列と数値ですよ?==が成立するなんて思いもつきませんが?本当です。実環境で相当悩みました。ソースコードレビューではわからない不具合ですね・・

FreeBSD 9.1のPHP 7.4.19 で確認しました。

$sts = 1;echo ($sts == 'fatal'); <= 不成立です。
echo (0 == 'fatal'); <= 不成立ですが・・・
$sts = 0;echo ($sts == 'fatal');
1 <= 成立です。
これってPHPの仕様なんでしょうかね?

久しぶりにドキドキました。謎の動作でどハマりしましたよ・・
ソースは以下のように修正したところ、仕様通りの動作となりました。
if( is_numeric($sts) == false && $sts == 'fatal' ){
エラー処理
}


 

  • 初期費用0円(2022年8月4日に撤廃)
  • 安定したサイト運営が可能(CPU/メモリ リソース保証 6コア/8GB〜)
  • 契約中は独自ドメインつき 独自ドメイン永久無料特典があります
  • 最大10日間無料で、サーバーのお試し利用ができます
  • ディスクキャッシュも高速 NVMe SSDを採用(300GB〜)
  • 大量アクセスでも安心 転送量は無制限

 

 

posted by scripts at 18:00 | Comment(0) | TrackBack(0) | php
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/10831430
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
最新記事
最新コメント
タグクラウド
カテゴリアーカイブ