PHP:请求数据的函数参数引用


PHP: function argument reference for request data

我知道在PHP中,当你希望函数参数引用目标变量时,我们使用与号&符号。但是我无法弄清楚在以下情况下它是否仍然有效和可靠(从请求中收集变量)。

$v1 = $_POST['v1'];
function filled(&$var) {
    return isset($var) && !empty($var);
}
if (!filled($v1)) // etc.

甚至在这种情况下:

$v1 = $_POST['v1'];
$v2 = $_POST['v2'];
function filled() {
    $args = &func_get_args(); // does this even take the references and not the values?
    foreach ($args as &$arg) {
        if (empty($arg) || !isset($arg)) return false;
    }
    return true;
}
if (!filled($v1, $v2)) // etc.

提前感谢您的澄清。

它仍然有效,因为引用并不关心变量是用户定义的还是来自 PHP 超全局变量,但您的第一个示例存在一些问题。

首先,当你这样做时$v1 = $_POST['v1']; $v1现在独立于$_POST['v1']变量。 对$v1所做的任何更改都不会反映在$_POST['v1']中,因为您制作了副本。

你可以做:$v1 = &$_POST['v1'];创建对它的引用。

其次,在函数中调用isset将始终返回 true。 isset是一种特殊的语言结构,而不是函数。 如果未设置$_POST['v1'],则在将$_POST['v1']分配给$v1后,仍会设置$v1(但将为空)。

另外,据

我所知,func_get_args()不支持引用,它返回的所有值都是原始值的副本。

这是否解决了您的一些问题? 如果没有,请随时询问您想要澄清的任何事情。

场景 1:它不会做你想要的,因为$var总是被设置为函数参数。但是,如果要检查此参数是否不包含空值(null,false等),则可以执行empty($var)。无需在那里使用&。你想要的可以按照!empty($_POST['v1')完成。如果将某些内容传递给函数,它必须具有值,因此在函数中使用isset()不会执行任何操作。array_key_existsisset()empty()室外使用。

场景2:func_get_args()不需要&,放下它。 $arg也不需要它,并且将始终设置,因此isset()检查是无用的,尽管只有empty()有用。如上所述,如果要查看数组键是否存在,请使用 isset($_POST['v1'])!empty($_POST['v1'])