如何编写一个函数来检查变量是否已定义并且是一个数字?

时间:2012-06-02 20:24:35

标签: php

过去当我需要检查变量是否设置为并且一个数字时,我会这样做:

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错误:

  

注意:未定义的索引:...

因此,函数的整个目的基本上都被打败了(或者目的的一半,至少;))。

让我感到困惑的一件事是isset()函数是如何工作的,以及为什么我可以将未定义的变量传递给它但不传递给我自己的函数?

是否可以使我的setAndNum()函数有效?

7 个答案:

答案 0 :(得分:11)

问题在于$_GET是一个数组。将$_GET['var']传递给函数时,此数组值已被查找并用作函数的参数。因此,您无法在此函数中的中有效检查'var'$_GET的存在。您可以重写它以使其适用于数组值,如下所示:

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

然后这样称呼:

if( setAndNum('var', $_GET) )

答案 1 :(得分:3)

在使用密钥之前验证密钥是一种好习惯:

if (array_key_exists($_GET, 'var')) {
  // do stuff with $_GET['var']
}

答案 2 :(得分:0)

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

答案 3 :(得分:0)

请尝试使用此版本:

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

答案 4 :(得分:0)

您可以使用@运算符来阻止错误报告:

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

这样,不会打印不存在索引的错误消息,返回值将为0

答案 5 :(得分:0)

您还可以编写两个函数,一个用于检查数组,另一个用于检查正常变量

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;
}

答案 6 :(得分:-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
}