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