0

過去に、変数数値が設定されているかどうかを確認する必要があったときは、次のようにしました。

if( isset($_GET['var']) && is_numeric($_GET['var']) )

しかし、特に同じifステートメントで多数の変数をチェックする必要がある場合は、それはちょっと醜いと思うので、関数を作成しました:

function setAndNum($var)
{
    if(isset($var) && is_numeric($var))
        return 1;
    else
        return 0;
}

問題は、次のように未定義の変数を関数に渡すときです(GET配列の変数が未定義であると仮定します):

if( setAndNum($_GET['var']) )

私はphpエラーを受け取ります:

Notice: 未定義のインデックス: ...

したがって、関数の目的全体が基本的に無効になります(または、少なくとも目的の半分;))。

私を混乱させることの 1 つは、isset() 関数がどのように機能するか、および未定義の変数を渡すことができるのに、自分の関数には渡せないのはなぜですか?

setAndNum() 関数を機能させることは可能ですか?

4

7 に答える 7

11

あなたの問題は$_GET、配列であることです。関数に渡す$_GET['var']と、この配列値はすでに検索されており、関数の引数として使用されています。したがって、この関数'var'でin $_GETfromの存在を効果的にチェックすることはできません。次のように、配列値に対して機能するように少し書き直すことができます。

function setAndNum($key, $array)
{
    if(array_key_exists($key, $array) && is_numeric($array[$key]))
        return 1;
    else
        return 0;
}

次に、次のように呼び出します。

if( setAndNum('var', $_GET) )
于 2012-06-02T20:28:45.900 に答える
3

キーを使用する前に、キーが存在することを確認することをお勧めします。

if (array_key_exists($_GET, 'var')) {
  // do stuff with $_GET['var']
}
于 2012-06-02T20:29:07.350 に答える
0

配列をチェックする関数と通常の変数をチェックする関数の 2 つの関数を作成することもできます。

function setAndNum($var)
{
    if(isset($var) && is_numeric($var))
      return 1;
    else
      return 0;
}

function setAndNumArray($array, $key)
{
    if(isset($array) && isset($array[$key]) && is_numeric($array[$key]))
       return 1;
    else
      return 0;
}
于 2012-06-02T20:35:37.510 に答える
0
function setAndNum(&$var)
{
    if(isset($var) && is_numeric($var))
        return 1;
    else
        return 0;
}
于 2012-06-02T20:30:55.657 に答える
0

このバージョンを使用してみてください:

function setAndNum(&$var)
{
    if(isset($var) && is_numeric($var))
        return 1;
    else
        return 0;
}
于 2012-06-02T20:31:30.237 に答える
0

演算子を使用し@て、エラー報告を防ぐことができます。

setAndNum(@$_GET['var']);

このように、存在しないインデックスのエラー メッセージは出力されず、戻り値は になります0

于 2012-06-02T20:31:45.000 に答える
-2

GET または POST メソッドから変数を使用している場合、これらはスーパー グローバルであるため、このようにすることができます。

function setAndNum()
{
    if(isset($_GET['var']) && is_numeric($_GET['var']))
        return 1;
    else
        return 0;
}

今あなたの別のクエリに来ています。isset は、変数が設定されているかどうかをチェックします

if(isset($_POST['submit']))
{
// any code under button click
}
于 2012-06-02T20:31:39.347 に答える