2016-12-23 32 views
0

這裏是我的例子:php,在NULL變量的關鍵檢查獲取設置,如何?

$data = null; 

var_dump($data); // returns null 

is($data['test']); 

var_dump($data); // returns array (size=1) 
       //   'test' => null 

function is(&$var, $default = null) 
{ 
    return isset($var) ? $var : $default; 
} 

通知我跑is($data['test'])後,$data成爲$data['test'] = null

任何想法,爲什麼這種行爲?我想找null。我運行PHP 7

編輯:它是&符號,只是不知道爲什麼會產生這種結果

+0

請注意,它的工作原理如果你不通過引用傳遞第一個參數:'函數是($ var,$ default = null)' –

+0

@FredB是的,它的確如此,但有時候我得到的通知 – Patrioticcow

回答

0

你不能傳遞變量用不存在的關鍵功能(即使參考),因爲該值將被傳遞給函數。

如果我們有$data,並在下一行如果我們做$data['test']$data變量將被更新爲一個數組。

所以在你的情況下,當你使用is($data['test']);時,它更新變量。

然後進入該功能,並檢查isset($var)。它已經設置,因爲變量已經更新。所以isset得到一個true返回。該返回將包含更新變量,即$data['test']

我認爲從@Fred B的解決方案將在這種情況下工作。

+0

我看到'$ data ['test ']'首先被評估 – Patrioticcow

0

嘗試使用array_key_exists(),如果沒有找到鍵返回null。

+0

將不起作用。 '$ data'不是數組 – Patrioticcow

0

該解決方案似乎工作,雖然不那麼優雅:

is($data, 'test'); 

var_dump($data); // returns array (size=1) 
       //   'test' => null 

function is($var, $key, $default = null) 
{ 
    return isset($var[$key]) ? $var[$key] : $default; 
} 
+0

是的,我明白如何檢查一個鍵或變量是否存在,有很多種方法,我在想''''符號特別是 – Patrioticcow