2017-08-03 152 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之间,我想我明白了。 –