0

以下のコードでは、タスクの値がゼロであっても、タスクを印刷して終了するページを取得します。

$task = (isset($_POST['task']))?$_POST['task'] :(isset($_GET['task']))?$_GET['task']:0; 
if($task == "delete") {
    echo $task;
    exit(); 
}

出力:

0

ただし、最初の行を次のように変更すると:

$task = (isset($_POST['task'])) ? $_POST['task'] :(isset($_GET['task'])) ? $_GET['task'] : NULL;    

正常に動作するのに、文字列 'delete' の値が 0 になるのはなぜですか?

4

2 に答える 2

11

数値に変換できない文字列は、自動的に 0 に変換されます。したがって、数値と比較する場合、「削除」は0です。

同一性演算子を使用して比較して、型を確認することもできます

if($task === "delete") {
    echo $task;
    exit(); 
}

これにより、型がチェックされ、結果として false が返されることが保証されます。

于 2011-08-13T18:14:38.540 に答える
2

三項演算子に括弧がありません。演算子の優先順位の例を参照してください。

$a = true ? 0 : true ? 1 : 2; // (true ? 0 : true) ? 1 : 2 = 2

あなたの例:

$task =
  (
    (isset($_POST['task']))
    ? $_POST['task']
    : (isset($_GET['task']))
  )
  ? $_GET['task']
  : 0;

したがって、場合によっては、「無効なインデックス」PHP 警告が表示されることも$_POSTあります。$_GET

于 2011-08-13T18:14:24.870 に答える