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

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

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

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

是否可以让我的 setAndNum() 函数工作?

4

7 回答 7

11

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

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
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 回答
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;
}
于 2012-06-02T20:35:37.510 回答
-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 回答