-1

誰かが説明してくれますか、理由を教えてください:(DBフィールドを「1」のようにintに設定している場合-このステートメントは機能しますが、文字列として設定している場合-機能しません。

作品:

if ( $results['page']->pageStatus != 1 ) {
header('Location: 404.html');}

動作しません:

if ( $results['page']->pageStatus !== "active" ) {
header('Location: 404.html');}
4

2 に答える 2

1

ドキュメントに従って:

数値を文字列と比較する場合、または比較に数値文字列が含まれる場合、各文字列は数値に変換され、数値として比較が実行されます。これらの規則は、switch ステートメントにも適用されます。比較が === または !== の場合、値だけでなく型も比較するため、型変換は行われません。

だからあなたがそうするとき(そして私はそれ$results['page']->pageStatusがタイプであると強く疑っていますstring):

if ( $results['page']->pageStatus != 1 )

$results['page']->pageStatus数値に変換されます。この場合は に変換され0ます。と0 != 1評価されtrueます。

于 2013-03-08T22:16:27.087 に答える
0

式をtrueまたはfalseに評価する必要があります。に変更します

if ( !($results['page']->pageStatus == "active") ) { header('Location: 404.html');}

于 2013-03-08T22:22:09.700 に答える