5

さまざまなPHPチュートリアルで、この構文が表示されます-

if ($_POST) {
  do something
}

これがissetまたは!(empty)(いずれか1つ)と同等であるか、または異なるプロパティを持っているかを知りたいです。

4

6 に答える 6

5
于 2012-11-28T07:23:22.600 に答える
2
if ($_POST)

POST配列に要素がある場合、これはtrueと評価されます。

if(isset($_POST))

POST配列は常に設定されているため、これは常にtrueと評価されますが、要素が含まれる場合と含まれない場合があるため、最初の例と同等ではありません。

if(!empty($_POST))

empty()ただし、配列の内容をチェックするため、これは最初の例と同等です。

ページが投稿されたかどうかをテストする一般的な方法は次のとおりです。

if($_SERVER['REQUEST_METHOD'] == 'POST')
于 2012-11-28T07:24:33.827 に答える
2

良い質問。あなたが私に尋ねれば、あなたはPHPのダークサイドの1つに取り組んでいます。

ifステートメント 他の言語と同様に、パラメーターをtrueまたはfalseのいずれかに評価するかどうかを想像できます。

PHPは実際には型を認識していないため、任意の式をパラメーターとして配置し、全体としてboolにキャストすることができます。

次の値は「FALSE」と見なされます

  • ブール値FALSE
  • 整数0
  • フロート0.0
  • 空の文字列
  • 文字列「0」
  • 要素がゼロの配列
  • NULL(例:未設定の変数または$ var = null)
  • 空のタグから作成された場合のSimpleXMLオブジェクト

他のすべての値または式の結果はboolTRUEにキャストされます

これを知っているので、私たちが知る必要があるのは、実行されたときに式または関数が何を返すかということだけです。

POSTデータが設定されていない場合、次の式はTRUEになります。

$_POST == FALSE

isset関数

issetは、指定された変数がnullではなく設定されている場合、boolTRUEを返します。

パラメータには、変数、配列要素、文字列オフセット、およびオブジェクトのデータメンバーを指定できます。

PHP 5.4では、文字列オフセットの動作を修正しました

$var = FALSE;

isset( $var ) === TRUE;
$var === FALSE;

詳細はこちら http://de1.php.net/manual/en/function.isset.php

空関数

変数が空であると見なされるか、存在しない場合はfalseを返します。

これらの値は空と見なされます。

varが存在し、値が空でもゼロでもない場合はFALSEを返します。それ以外の場合はTRUEを返します。

次の値は空であると見なされます。

  • ""(空の文字列)
  • 0(整数)
  • 0.0(フロート)
  • 「0」(文字列)
  • ヌル
  • FALSE
  • array()(空の配列)
  • また、値のない宣言された変数は空です

表を比較

$var = FALSE;

isset($var) === TRUE;
empty($var) === TRUE;
$var === FALSE;
于 2012-11-28T07:56:12.067 に答える
1

$_POST:これは、HTTP POSTメソッドを使用してデータが渡されているかどうかを確認し、連想配列に収集された、同じメソッドを介して送信された変数を抽出するために使用されます

issetNULL:変数が設定されている(定義されている)か、設定されている(未定義)かを確認します

于 2012-11-28T07:23:04.563 に答える
0

PHP.netは、言語の複雑さと癖を理解するための貴重な情報源です。

そうは言っても、それらは同等ではありません。ifステートメントは、式をブール値に変換します(falseと見なされるものについては、ここを参照してください)。

issetは、「変数が設定されていて、NULLでないかどうかを判別する」ために使用されます。

emptyは、変数が空であるかどうか、つまり「変数が存在しないか、その値がFALSEに等しいか」を判別します。

于 2012-11-28T07:33:59.967 に答える
0

変数の値を確認したいが、それが設定されているかどうかわからない場合のベストプラクティスは、次のことです。

if(isset($var) && $var) { ... }

つまりisset()、ANDをチェックしてから、変数値自体をチェックします。

これは、質問の例のように、変数自体をチェックするだけで、変数が設定されていない場合にPHPが警告をスローするためです。警告メッセージは致命的なエラーではなく、メッセージテキストを非表示にすることもできますが、通常、警告がスローされないようにコードを記述することをお勧めします。

呼び出すisset()と、変数が設定されているかどうかだけがわかります。変数の値については何も教えてくれないので、それだけに頼ることはできません。

お役に立てば幸いです。

于 2012-11-28T07:35:04.973 に答える