[英]Passing variable by reference creates said variable
function value(&$param){}
value($var['key']);
echo array_key_exists("key", $var)? "true" : "false"; //true
運行此代碼后,盡管從未顯式設置$ var ['key'],但它仍然存在。 這意味着empty($var)
將不再返回true
,這困擾着我。
這是故意行為嗎? 我找不到有關的文檔。
$foo = &$bar['key']; $echo array_key_exists('key', $bar)? "true" : "false";
要通過引用傳遞,必須有一個引用傳遞。 要引用傳遞,必須創建變量。 因此,應該在上面的代碼中創建變量。
這與內置exec( $cmd, $out)
的情況類似,即使$ cmd不產生輸出,$ out也將存在。
在您的代碼中,您可以嘗試empty($var['key']
。
由於您需要將變量傳遞給函數,因此必須先創建引用。 在其他語言中,您會收到錯誤消息,因為鍵不存在,因此無法傳遞給函數。 但是,在PHP中,創建變量和使用變量之間沒有區別。 因此,您先創建密鑰,然后再傳遞它,但是PHP語法對您隱藏了它。
當由PHP解釋執行時,這實際上發生了:
$var['key'] = null;
value($var['key']);
從解釋器的角度來看,這確實是一種奇怪的行為。 如果該變量按值傳遞,則將生成運行時錯誤,因為不會隱式創建它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.