簡體   English   中英

通過引用傳遞變量創建所述變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM