2011-07-11 122 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(); 
?>