2013-08-12 40 views
-1
function myCheck($in) 
     { return isset($in); } 

$var1='Something'; 
$var2='$var1'; 
$var3='$varNonExitant'; 

我試圖才達到是使用myCheck來評價這樣的內容是否存在等:「間接」 isset()函數

myCheck($var2) return true; 
myCheck($var3) return false; 
+4

有一個PHP功能。它叫做isset! :-) –

+1

@NicholasKing - 他可能意識到這一點,因爲他正在爲它編寫封裝。 –

+1

你「真的」想做什麼? –

回答

-2

當你cyall myCheck($ abc),設置$ abc = 123時,它會得到myCheck(123)。這不是isset的任何有效參數。

你必須給函數的字符串與變量名:

function isset_global($variable_name) 
{ 
    return isset($GLOBALS[$variable_name]); 
} 

當然,我也想知道,爲什麼要做到這一點,但只要你選中一個全局變量它回答了這個問題。

+0

這將始終失敗,因爲除'$ in'之外,函數內部不存在變量。 – deceze

+0

這是一個壞主意。由於'$$ in'指的是一個在函數範圍中不存在的變量,因此您總會得到false。 –

+0

注意編輯。你可以使用全局。 –

6

isset()是不是一個真正的函數:它是一種語言構造。因此,它可以做一些常規功能無法提供的魔法,比如用不存在的變量提供。

總結:你不能用自定義函數複製它。

編輯:

由於DaveRandom下面pointed out in a comment,所有你能做的是通過檢查接近舉例來說,如果一個變量isset:

function variable_isset(&$variable = NULL) { 
    return isset($variable); 
} 

這種方法有兩個缺點,但:

  1. 這工作通過通過uns通過引用變量,從而在被調用時創建它。由於它是NULL,它仍然沒有設置。

  2. 它會觸發未定義的變量注意,如果該變量不存在,則破壞正常處理可選變量的整個概念。

很可能這不應該需要。所以問題仍然是爲什麼你不能在第一時間使用isset,這將更需要給你更好的指導。

+0

因爲當isset()不是函數?它列在php文檔下的功能! –

+2

@Nicholas它在手冊頁上這麼說... – deceze

+0

@deceze我站在正確的位置! –