用于取消设置通过引用传递的变量的php函数
目前我正在使用这个php函数:用于取消设置通过引用传递的变量的php函数,php,Php,目前我正在使用这个php函数: function if_exist(&$argument, $default = '') { if (isset ($argument)) { echo $argument; } else { echo $default; } } 我想让这个函数在回显变量$argument(通过引用传递)和$default的值后立即取消设置它们,我该怎么做? 提前感谢。$default是按值
function if_exist(&$argument, $default = '')
{
if (isset ($argument))
{
echo $argument;
}
else
{
echo $default;
}
}
我想让这个函数在回显变量$argument(通过引用传递)和$default的值后立即取消设置它们,我该怎么做?
提前感谢。
$default
是按值传递的,因此不能取消设置(本地范围除外)
毫无疑问,正如您所发现的,unset()
只是取消对$argument
的引用。您可以(有点)像这样取消设置$argument
:
$argument = null;
根据手册: 如果通过引用传递的变量在 函数,则仅销毁局部变量。中的变量 调用环境将保留与unset()之前相同的值 打电话来 我想这就是你遇到的问题。因此,我的建议是简单地将
$argument
设置为NULL
。根据该命令,将“删除变量并取消设置其值”
例如:
$argument=NULL代码>使用函数执行此操作的唯一方法是使用全局变量
//To unset() a global variable inside of a function,
// then use the $GLOBALS array to do so:
<?php
function foo()
{
unset($GLOBALS['bar']);
}
$bar = "something";
foo();
?>
//要取消设置()函数中的全局变量,
//然后使用$GLOBALS数组执行此操作:
如果var是而不是数组,并通过引用传递,unset实际上是unset指针,因此它不会影响原始值
但是,如果var是数组,则可以取消设置其键。例如:
$arr = [
'a' => 1,
'b' => ['c' => 3],
];
function del($key, &$arr) {
$key = explode('.', $key);
$end = array_pop($key);
foreach ($key as $k) {
if (is_array($arr[$k]) {
$arr = &$arr[$k];
} else {
return; // Error - invalid key -- doing nothing
}
}
unset($arr[$end]);
}
del('b.c', $arr); // $arr = ['a' => 1, 'b' => []]
del('b', $arr); // $arr = ['a' => 1]
分配给null与取消设置null并不完全相同,即使这意味着isset()
将以任何方式给出相同的结果。但我想这就足够了,因为无论如何调用unset()
都不能做到这一点。我也这么做了,但还是运气不好,$argument和$default都没有被取消设置(@Pawan Choudhary:你能在你原来的帖子中显示你的新代码,并显示你是如何检查变量是否被设置的吗?函数if_exist(&$argument,$default=''){if(isset($argument)){echo$argument;}else{echo$default;}$argument=NULL;}我正在使用这样的函数:$select='something';if_exist($select,);@Pawan Choudhary:注释中的代码很难阅读,因此我建议您编辑原始帖子以显示新代码。其次,您还没有显示如何在运行if_exists()
后确定$select是否未设置。您应该有一行类似if isset($select){//do something}
。我这样做了:函数if_存在(&$argument,$default=''){if(isset($argument)){echo$argument;}否则{echo$default;}$argument=NULL;}但仍然没有运气,结果和以前一样。(@Pawan:在你的情况下这可能是可能的,我不确定,但把它设为空怎么样(即$argument='';
)然后检查它是否为空,而不是检查它是否已设置。当然,这取决于空白字符串是否为有效值。