私は比較「エラー」とかなり混乱しています。この比較をコーディングした方法では、ユーザーが0または1以外の値(または値なし)を入力した場合、結果が0になるようにします。
session_start();
function test( $status = 0 ) {
if( !isset($_SESSION['status']) ) { $_SESSION['status'] = 0; }
else {
switch( $status ) {
case 0: $_SESSION['status'] = $status;
break;
case 1: $_SESSION['status'] = $status;
break;
default:
$_SESSION['status'] = 0;
$status = 0;
}
}
echo 'Variable value: ' . $status;
echo ' | Session value: ' . $_SESSION['status'] . "<br/>";
}
test();
test(0);
test(1);
test(999);
test('ready');
ただし、 RATHER THANtest('ready');
を出力するため、で壊れます。数値を文字列と比較している場合でも、引き続き正常に機能する(そして実行する)必要があります。Variable value: ready | Session value: ready
Variable value: 0 | Session value: 0
case o:
ところで:私が置き換えても結果は同じswitch
ですif( $status ===
===編集:2012年12月19日=== @ bryan-bと@jatochnietdanのコメントと回答に
感謝します: if(0 =='string')-Because a string (when compaired with numbers [
] ) is compared as 0
それは私が問題を理解するのを助け、他の言語とは異なり、それらは異なるデータ型であるため、比較で自動的にfalseを返すのではなく、それを学びました。phpは、数値と比較したときに値が0であるかのように文字列変数を比較します。それは注意すべきことです。
これは修正された(動作している)コードです:
session_start();
function test( $status = 0 ) {
if( !isset($_SESSION['status']) ) { $_SESSION['status'] = 0; }
else {
switch( $status ) {
case 1: $_SESSION['status'] = $status;
break;
default:
$_SESSION['status'] = 0;
$status = 0;
}
}
echo 'Variable value: ' . $status;
echo ' | Session value: ' . $_SESSION['status'] . "<br/>";
}
test();
test(0);
test(1);
test(999);
test('ready');
@bryan-bと@jatochnietdanに感謝します!!!
PS。2つの答えに投票できたらいいのにと思います。