解析为相同变量名的不同 PHP 变量变量是同一个变量吗?

Are different PHP variable variables that resolve to the same variable name the same variable?

提问人:Troy D 提问时间:8/3/2017 更新时间:8/3/2017 访问量:54

问:

假设我有一个字符串数组,用于创建变量:

$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 和 $$a 是同一个变量,还是它们引用不同的内存块?

php 变量

评论

1赞 chris85 8/3/2017
$$item正在创建 . 将覆盖,因为它具有相同的名称。我认为这与您正在做的事情大致相同 eval.in/840949(或 eval.in/840950 因为您正在附加)$item1$$a$item1
0赞 Troy D 8/5/2017
感谢@chris85的演示。看到一个工作的例子有很大帮助!

答:

1赞 Black Mamba 8/3/2017 #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
?>

这里需要注意的一件事是,只是使用知道你想要的变量的名称,所以两者都将访问同一个内存块,因为你在这里引用了同一个变量。 这里需要注意的另一件事是 PHP 7 中解释从 PHP 5 的变化${$variable_name_string}$variable_name_string

表达式 PHP 5 将其解释为,而 PHP 7 将其解释为 有关更多信息,请参阅 PHP 手册$$foo['bar']['baz']${$foo['bar']['baz']}($$foo)['bar']['baz']

评论

0赞 Troy D 8/5/2017
谢谢!在你和@chris85之间,我想我明白了。