自定义函数,使用isset()在使用时返回未定义的变量

时间:2014-04-28 15:16:57

标签: php variables undefined isset

我有一个依赖于自定义文本的字段,如果满足某个条件......如果不是,则该字段为空。

如果设置了变量,我已经编写了自定义函数测试

function AmISet($fieldName) {

if (isset($fieldName)) {

    echo "I am set";
}else{
    echo "I am not set";    
    }
};

但是当我将它附加到字段时,我得到一个错误,即变量未定义。但是当我定期isset($fieldName);时 我没有问题。有没有办法绕过这个并让我的函数执行此操作而不是isset()?

我想在函数中添加其他逻辑,但我只想让它在设置变量时才能工作......但如果不是,我不想要未定义的错误。

我是php的新手,非常感谢您能给我的任何帮助或指导。 谢谢你的帮助!

2 个答案:

答案 0 :(得分:3)

您需要通过引用传递变量:

function AmISet(&$fieldName) {
    if (isset($fieldName)) {
        echo "I am set\n";
    } else {
        echo "I am not set\n";    
    }
}

测试用例:

$fieldName = 'foo';
AmISet($fieldName); // I am set

unset($fieldName);
AmISet($fieldName); // I am not set

但是,这个函数没有用,因为它只会输出一个字符串。您可以创建一个接受变量的函数,如果存在则返回(来自this post):

function issetor(&$var, $default = false) {
    return isset($var) ? $var : $default;
}

现在它可以这样使用:

echo issetor($fieldName); // If $fieldName exists, it will be printed

答案 1 :(得分:1)

  

$fieldName来自一个复选框时执行的查询   检查。如果选中此框,则查询和变量   是从查询中设置的,如果不存在,则该字段为空。

Filter functions专为此类任务而设计:

<input type="foo" value="1">
$foo = filter_input(INPUT_POST, 'foo')==='1';

(还有一个特定的FILTER_VALIDATE_BOOLEAN过滤器,您可以将其作为第二个参数传递。)

现在你有一个始终存在的纯PHP布尔值。