将未设置的变量传递给函数

时间:2011-04-05 12:04:54

标签: php variables exists

我的代码:

function Check($Variable, $DefaultValue) {
    if(isset($Variable) && $Variable != "" && $Variable != NULL) {
        return $Variable;
    }
    else {
        return $DefaultValue;
    }
}

$a = Check(@$foo, false);
$b = Check(@$bar, "Hello");

//$a now equals false because $foo was not set.
//$b now equals "Hello" because $bar was not set.
  1. 当变量不存在并传递给函数(抑制错误)时实际传递的是什么?
  2. 此功能可能会出现任何未定义的行为吗?
  3. 是否有更好的方法来包装变量存在的测试并从函数中提供默认值?
  4. 在测试变量时,isset()检查了什么?

  5. 修改

    默认值是用户定义的。有时它会是一个数字,有时是一个字符串。

4 个答案:

答案 0 :(得分:8)

  1. 传递NULL,引发通知错误。
  2. 不,函数只看到它的参数(它不关心它是如何被调用的)
  3. 您可以轻松指定默认值 - function func($ mandatory,$ optional ='default value');
  4. 对其参数设置函数是没有意义的,因为参数已在函数签名中设置。

答案 1 :(得分:2)

  1. null将通过
  2. PHP AFAIK
  3. 中没有未定义的行为
  4. 通常使用empty($var)进行测试,例如:Check(empty($foo) ? null : $foo),但视具体情况而定isset可能更合适
  5. isset的确如此documented - 它会测试范围内是否存在此类变量且其值与null不相同

答案 2 :(得分:2)

  

当变量不存在且是   传递给函数(压制   错误)实际传递的内容是什么?

在这种情况下,您尝试从不存在的变量中读取
所以,你得到null - 传递给函数。


  

是否有任何未定义的行为   这个功能可以展示吗?

不是我看到的 - 除了使用@运算符不是一个很好的做法。

答案 3 :(得分:2)

您可以通过引用&引用将变量传递给方法。在声明函数时在它前面。然后你可以检查它是否在函数内部设置,而不必担心在传递未设置的值时抑制警告。

function Check(&$Variable, $DefaultValue) {
    if(isset($Variable) && $Variable != "" && $Variable != NULL) {
        return $Variable;
    }
    else {
        return $DefaultValue;
    }
}

$a = Check($foo, false);
$b = Check($bar, "Hello");
相关问题