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


custom function that uses isset() returning undefined variables when used

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

我写了一个自定义函数测试,如果变量设置为

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

但当我把它附加到字段时,我会得到一个错误,即变量是未定义的。但当我做常规isset($fieldName);我没有问题。有没有办法绕过这个问题,让我的函数来代替isset()?

我想在函数中添加其他逻辑,但我只希望它在变量被设置的情况下工作。。。但我不想要未定义的错误,如果不是的话。

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

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

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

但是,这个函数并没有实际用处,因为它只会输出一个字符串。你可以创建一个函数,接受一个变量并返回(如果它存在的话):

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

现在它可以这样使用:

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

$fieldName来自当复选框检查。如果选中该框,则进行查询是从查询中设置的,如果不存在,则它不存在并且字段为空。

过滤功能是为这类任务设计的:

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

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

现在,您有了一个始终存在的纯PHP布尔值。