Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于取消设置通过引用传递的变量的php函数_Php - Fatal编程技术网

用于取消设置通过引用传递的变量的php函数

用于取消设置通过引用传递的变量的php函数,php,Php,目前我正在使用这个php函数: function if_exist(&$argument, $default = '') { if (isset ($argument)) { echo $argument; } else { echo $default; } } 我想让这个函数在回显变量$argument(通过引用传递)和$default的值后立即取消设置它们,我该怎么做? 提前感谢。$default是按值

目前我正在使用这个php函数:

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='';
)然后检查它是否为空,而不是检查它是否已设置。当然,这取决于空白字符串是否为有效值。