2017-05-08 38 views
0

我需要能夠在純粹未定義的變量和空變量之間進行區分。 PHP很難做到這一點。困境在下面的鏈接解釋說:PHP - 在函數中包裝「未定義的檢查」技巧?

https://stackoverflow.com/a/14309841/3163495

在該鏈接,還有一招看到如果一個變量是真正的不確定,或簡單地設置爲NULL:

.. 。還有你可以用「緊湊型」,可以讓你 確定一個變量已經被定義,即使其值爲null,則使用一個技巧:

var_dump(!!compact('noSuchVariable')); // false 
var_dump(!!compact('nullVariable')); // true 

訣竅本身的偉大工程,但是當你試圖將其包裝在一個函數像這樣它打破:

function IsDefined(& $variable){ 
    return (!!compact('variable')); 
} 

上述功能IsDefined總是返回true,不管是什麼形式的不確定變量的我通過它。 請注意$ variable變量的「&」符號 - 我通過引用傳遞,否則PHP將拋出一個「未定義的變量」錯誤。

如何將上面提到的「未定義檢查」技巧轉化爲可重用的工作函數?

+2

你爲什麼要這麼做?如果你必須經常這樣做以至於你需要一個函數,那麼你的代碼似乎有問題。 – Barmar

+0

它們是否總是您需要檢查的全局變量?你可以測試'isset($ GLOBALS [$ varname])' – Barmar

+0

@Barmar不,它們不會是全局變量,它們將是我將嘗試通過引用傳遞給函數的變量IsDefined – user3163495

回答

1

從評論中,您不需要任何變量的解決方案,僅針對會話變量。會話變量不是實數變量,它們是關聯數組的元素。所以你可以使用array_key_exists()函數。

function sessionVarDefined($varname) { 
    return array_key_exists($varname, $_SESSION); 
} 

然後,你可以寫

if (sessionVarDefined('MyVariable') { 
    ... 
} 
+0

有關會話變量的評論只是一個例子,我需要它來處理所有類型的變量 – user3163495

+0

然後我回到我的評論你編碼的方式有些問題。你爲什麼不知道你設置了哪些變量? – Barmar

+1

我可以理解它的會話變量,因爲它們是由其他腳本設置的,並且您不知道在腳本運行之前完成了什麼。但是大多數變數並非如此飛行。 – Barmar