2
if((isset($_GET[example]))&&($_GET['example']=='somevalue')){ ... }

また

if((!empty($_GET[example]))&&($_GET['example']=='somevalue')){ ... }

あるいは単に

if($_GET['example']=='somevalue'){ ... }

$_GET['example'] が設定されているかどうかを最初にチェックし、次に $_GET['example']=='somevalue' (上記の最初と 2 番目の例) をチェックする多くの例を見た理由を尋ねています。最後の解決策を使用しない理由がわかりません( $_GET['example']=='somevalue' の場合、 $_GET['example'] は明らかに設定されています)。

この質問は、他の変数 ( $_POST、$_SERVER、ecc ) を参照しています。

4

6 に答える 6

8
if((isset($_GET[example]))&&($_GET['example']=='somevalue')){ ... }

正しいのは、それを使用するために「変数」が存在する(または設定されている)ことを知りたい場合です。Emptyは、何らかのデータがあるかどうかをチェックするだけです。例えば:

<?php
$foo= 0;

if (empty($foo)) { // True because $foo is empty
    echo '$foo is either 0, empty, or not set at all';
}

if (isset($foo)) { // True because $foo is set
    echo '$foo is set even though it is empty';
}

if (isset($var)) { // FALSE because $var was not declared before
   ...
}
?>
于 2012-06-04T16:10:40.140 に答える
4

issetとの違いemptyは微妙ですが重要です。単独で使用する場合に最も関連性があります。変数が存在し、真の値 (たとえば、すべてがスペースまたは 0 ではない文字列) であることを確認する場合は、どちらも同じ意味で使用できます。

isset をいつ使用するか

isset変数が定義されていて、null でないかどうかを知ることが重要な場合に使用します。

if (isset($maybeExistsMaybeNull)) {
    // variable defined and is not NULL
}

いつ !empty を使用するか

!empty変数が定義されており、真であるかどうかを知ることが重要な場合に使用します

if (!empty($mightBeEmpty)) {
    // variable defined, and isn't "", " ", 0, "0" etc.
}

!emptyは、exists と is something の優れた省略形です。

array_key_exists を使用する場合

array_key_existsキーが存在するかどうかを知ることが重要で、値が重要でない場合に使用します。

if (array_key_exists('something', $array)) {
    // $array['something'] exists, could be literally anything including null
}

isset を使用しない場合

コードが次のようになっている場合:

if (isset($something) && $something) {
    // code is shorter with !empty
}

!empty を使用しない場合

コードが次のようになっている場合:

if (!empty($something) && $something === "") {
    // you meant isset. this is unreachable.
}

次に、実行できないコードを書いています

エラーをスローするコードはエラーが発生しやすい

無視している通知/警告を発行するコードを記述しないでください。たとえば、質問では:

if((isset($_GET[example]))&&($_GET['example']=='somevalue')){ ... }

example の最初の使用法は、宣言されていない定数です。または、宣言されていません-define('example', "foo");コード内のどこかにある場合はどうなりますか。

if($_GET['example']=='somevalue'){ ... }

URL に含まれていない場合は?example=..、通知も発行されます。

エラーを表示せずにコードを書くということは、最初のような間違いを非常に簡単に見逃す可能性があることを意味します。

コンテキスト: isset と !empty は同等です

上記の例では、これら 2 つの言語構造はまったく同じように動作します。

一方が他方と異なる動作をすることはなく、変数が未定義の場合にどちらも通知を発行せず、両者の間に測定可能なパフォーマンスの違いはありません。

于 2012-06-04T16:49:23.580 に答える
3

$_GET や $_POST などをチェックするために他の人が言ったように、理想的には次を使用したいと思います。

if ( isset($_GET['example']) && $_GET['example'] =='somevalue' ) {

// process data

}

したがって、最初に変数が設定されている (null に設定されていない) こと、つまり存在することを常に確認する必要があります。次に、変数に期待したデータが含まれているかどうかを確認します。存在しない変数を (isset() をチェックせずに) 参照しようとすると、php は「undefined variable...etc」という通知を出します。

変数が設定されているかどうかを調べたいが、あまり気にしない場合は、次を使用できます。

if ( !empty($_GET['example']) ) {

// process data

}

しかし、空は「0」や「

したがって、私は常に最初のものを実行します.a)変数が存在することを確認し、b)それがあなたが期待していたものであることを確認します.

于 2012-06-04T16:30:30.167 に答える
0

これはおそらく頻繁に行うことであり、このチェックを処理するクラス/関数をまとめておくと、毎回行う必要がなくなるため役立ちます。

function checkValue($key, $value) {
    if(array_key_exists($key, $_REQUEST)){
        if ($_REQUEST[$key] == $value) {
            return true;
        } else {
            return false;
        }

    } else {
        return false;
    }
}

切り替える代わりに、デフォルトとして Request を使用するだけです (ただし、場合によっては、セキュリティのために POST と GET を切り替えることが望ましいです (imo))。

これで、この関数をどこでも呼び出すことができます if (checkValue('Item', 'Tom') === true){} など

于 2012-06-04T16:46:19.030 に答える
-1

最高は_

if((isset($_GET[example]))&&('somevalue'==$_GET['example'])){ ... }

の違い

'somevalue'==$_GET['example']

$_GET['example']=='somevalue'

代わりに==とタイプ=を間違えると、最初の概念でエラーが発生して通知されます。

于 2012-06-04T16:34:01.657 に答える
-1
if((isset($_GET[example]))&&($_GET['example']=='somevalue')){ ... }
于 2012-06-04T16:38:34.493 に答える