2017-08-03 138 views
1

比方說,我有我用它來創建變量變量字符串數組:是不同的PHP變量的變量解析爲相同的變量名稱相同的變量?

$var_arr = ["item1", "item2", "item3"]; 
foreach ($var_arr as $item) { 
    $$item = array(); 
} 

然後在我的代碼的其他地方我有一個基於不同的數據源上重新創建變量變量:

$user_input = [ "prod1" => "widget", "qty1" => 3, "prod2" => "thingy", "qty2" => 1, "prod3" => "dingus", "qty3" => 7 ]; 
foreach ($user_input as $key => $value) { 
    $a = "item" . substr($key, -1); 
    array_push($$a, $value); 
} 

$$ item和$$是同一個變量,還是它們引用不同的內存塊?

+1

$$ item'創造' $ item1'。 '$$ a'會覆蓋'$ item1',因爲它具有相同的名稱。我認爲這與你正在做的https://eval.in/840949(或https://eval.in/840950,因爲你正在追加)大致相同 – chris85

+0

感謝@ chris85作爲演示。它幫助我們看到了一個可行的例子! –

回答

1

兩者是相同的,你需要在這裏考慮的是什麼,你只是引用一個變量,通過每項任務在這裏:

<?php 
    $hello ="hello in variable"; 
    $array_hello = ["hello","Yellow"]; 
    $hello_var = "hello"; 
    $item = $array_hello[0]; 
    echo $$hello_var; 
    echo $$item; //result same as above result 
?> 

這裏有一點要注意的是${$variable_name_string}只是使用$variable_name_string知道的名字你想要的變量都會訪問相同的內存塊,因爲你在這裏引用了相同的變量。 一件事這裏需要注意的是解釋在PHP 7從PHP 5的變化

表達$$foo['bar']['baz'] PHP 5把它解釋爲${$foo['bar']['baz']},而PHP 7把它解釋爲($$foo)['bar']['baz'] Refer PHP manual for more

+0

謝謝!在你和@ chris85之間,我想我明白了。 –