2011-07-11 89 views
7

传递尚未设定的变量目前我使用这个PHP函数:PHP函数通过引用

function if_exist(&$argument, $default = '') 
{ 
    if (isset ($argument)) 
    { 
     echo $argument; 
    } 
    else 
    { 
     echo $default; 
    } 
} 

我想这个功能取消设置变量$参数(按引用传递)和$默认只回响着他们的价值后, , 我怎样才能做到这一点? 在此先感谢。

回答

12

按照手册unset:)一 函数内

如果所经过的参考变量是未设置(只局部变量被破坏。呼叫环境中的变量将保留与unset()为 之前调用的值相同的值。

我认为这是您遇到的问题。所以,我的建议是简单地将$argument设置为NULL。其中,根据NULL docs将“删除该变量并取消其值”。

例如: $argument = NULL;

+0

我这样做: 功能if_exist(&$参数$默认= '') { \t如果(isset($参数)) \t { \t \t回波$参数; \t} \t别的 \t { \t \t回波$默认; \t} \t $参数= NULL;} 但仍没有运气,结果是与以前相同:( –

+0

@Pawan:这可能是。可能在你的情况下,我不确定,但是把它变成空白(即。 '$ argument ='';'),然后而不是检查它是否设置,检查它是否为空。当然,这取决于空白字符串是否是有效值。 –

2

$default是按值传递的,所以它不能被取消设置(本地范围除外)。

正如您毫无疑问发现的那样,unset()只是简单地取消了对$argument的引用。你可以(在某种程度上)未设置$argument这样的:

$argument = null; 
+0

指定为null与取消设置并不完全相同,即使这意味着'isset()'将会给出相同的结果。但我想这就足够了,因为无论如何你都不能通过调用'unset()'来做同样的事情。 – BoltClock

+0

我也是这样做的,但仍然没有运气,无论$参数还是$默认值都未被设置。 :( –

+0

@Pawan Choudhary:你可以在你原来的帖子中显示你的新代码,并且显示你是如何检查变量是否被设置的吗? –

1

用一个函数来做到这一点是使用全局的唯一途径。

//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(); 
?>