如何使用PHP构建动态变量?

3

我正在尝试在PHP中构建一个动态变量,并且尽管已经在StackOverflow上查看了一些相关问题,但我仍然被难住了...:/

变量变量是我从未真正理解的东西 - 希望这里有人可以指引我正确方向。 :)

$data['query']->section[${$child['id']}]->subsection[${$grandchild['id']}]->page[${$greatgrandchild['id']}] = "Fluffy Rabbit";

显然,上述方法不起作用,但如果我像这样硬编码一个变量:
$data['query']->section[0]->subsection[3]->page[6] = "Very Fluffy Rabbit";

如果一切正常,那么显然我没有正确构建我的动态变量。有什么想法吗?

更新:

嗯,好的,我应该指出这些不是数组中的键 - 我正在使用每个节点指定为属性的ID来寻址XML中的节点,因此XML具有以下结构:

<subtitles>
<section id="0">
<subsection id="0">
<page id="1">My content that I want to write</page>
<page id="2">My content that I want to write</page>
<page id="3">My content that I want to write</page>
</subsection>
</section>
</subtitles>

希望这能更好地解释事情。 :)

4
变量-变量是有害的,应该避免使用。特别是在你的情况下,即使你自己写的时候也无法理解... 想象一下,当你需要修复一个错误时,一年后弄清楚发生了什么是多么困难。请编写易读的代码。请编写简单的代码... - ircmaxell
1
@ircmaxell 它可以简化代码,甚至使其更易读。例如,想象一个工厂,巨大的开关(创建数十个类),而不是那个代码片段:factory($class_name){return new $class_name()} - Itay Moav -Malimovka
@Itay Moav:在这种情况下,如果您添加一个不存在的$class_name,您的应用程序将会崩溃。 - Rene Terstegen
@Itay Moav:我不认为这是一个变量-变量。当然,它是一个非常相似的概念(类似于$foo($bar)),但我所说的是$$foo${$foo}...其中变量是由存储在另一个变量中的名称引用的(变量-变量的真正定义)... - ircmaxell
1
@Stegeman 那只是为了表达这个想法,很容易添加 is_class 或类似的东西,并设置默认类。 - Itay Moav -Malimovka
5个回答

6
你认为在这里使用动态变量有什么必要吗?难道这不已经实现了你想要的功能吗:
$data['query']->section[$child['id']]->subsection[$grandchild['id']]->page[$greatgrandchild['id']] = "Fluffy Rabbit";

1
在这个例子中,您不需要动态变量。
如果$child ["id"]的值为0,$grandchild ["id"]的值为3,$greatgrandchild ["id"]的值为6,您应该使用类似以下的语句:
$data['query']->section[$child['id']]->subsection[$grandchild['id']]->page[$greatgrandchild['id']] = "Fluffy Rabbit";

通常你会像这样使用动态变量:

$variable = "variableName";

$$variable = "Some value";

echo $variableName;

这将显示:
Some value

编辑

完全同意ircmaxell的观点。


1

看起来你正在混淆变量变量和老式的数组键。变量变量是一种机制,允许读取(或写入)一个变量的值,其名称未知或可能会更改,而且说实话,它们几乎从不必要:

<?php

$first_name = 'John';
$last_name = 'Smith';

$display = 'first_name';
echo $$display; // Prints 'John';

$display = 'last_name';
echo $$display; // Prints 'Smith';

然而,你的代码表明你只想访问数组中的一个键:

<?php

$person = array(
    'first_name' => 'John',
    'last_name' => 'Smith',
);

$display = 'first_name';
echo $person[$display]; // Prints 'John';

$display = 'last_name';
echo $person[$display]; // Prints 'Smith';

在PHP中,数组键可以是整数或字符串,但它不必是字面量:您可以从变量中检索键。

1
$foo = "hello";

$$foo = " world";

//echo $foo.$$foo;

echo $foo.$hello;

更正确的解释是:$foo = "hello"; $$foo = " world"; echo $foo.$hello; - Alex Pliutau
输出“hello”。因为$foo有一个空格。 - Alex Pliutau

0
$foo='bobo';
echo $foo;//"bobo"
$$foo='koko';
echo $$foo;//"koko"
echo $bobo;//"koko"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接