我遇到了这个问题。我有一堆数组决定运行哪一个我想用双'$'。
因此,如果$foo
是'bar'
,我得到了阵列$bar
与$$foo
。
这很好,但我如何获得$ bar的第一个元素? $ bar [0]就是这样,但$$foo[0]
根本不给任何输出。
任何人都可以帮助我吗?
(我知道这是一个非常糟糕的风格,但代码已经被别人做,我必须在这里和那里扩展它。我不会重写全部代码结构;-)
我遇到了这个问题。我有一堆数组决定运行哪一个我想用双'$'。
因此,如果$foo
是'bar'
,我得到了阵列$bar
与$$foo
。
这很好,但我如何获得$ bar的第一个元素? $ bar [0]就是这样,但$$foo[0]
根本不给任何输出。
任何人都可以帮助我吗?
(我知道这是一个非常糟糕的风格,但代码已经被别人做,我必须在这里和那里扩展它。我不会重写全部代码结构;-)
使用内$foo
周围括号:
echo ${$foo}[0];
你可以做同样的,当在一个可变的变量扩展辅助可变更为复杂:
$array1 = array('a');
$array2 = array('b');
$array3 = array('c');
// writes 'abc'
for ($i = 1; $i <= 3; ++$i)
echo ${'array' . $i}[0];
$var = $$foo;
echo $var[0]; // do whatever you want with that
请不要这样做。 Variable-variables是总是一个坏主意。有更好的方法来解决这个问题(比如数组)。使用变量变量会让你的代码变得更加难以理解。更不用说它可能具有的潜在安全影响。从长远来看,它是更好的...
请注意,我只谈论变量变量,而不是变量对象成员和方法($foo->$bar
和$foo->$method()
)...我一直都在使用它们(尽管即使这有一些缺点)。
我知道这是一种非常糟糕的风格,但代码已经由其他人完成,我必须将它延伸到这里和那里。我不会重写所有的代码结构;-) – tamasgal
@septi:没有理由不重写代码。请记住,不要重写它,你正在积累[技术债务](http://en.wikipedia.org/wiki/Technical_debt)。处理它的专业和最好的方法是当你发现这样的混乱时清理代码。否则,从长远来看,你会花费自己的重大问题。请记住,可维护性是至关重要的,所以最好稍加努力来解决问题,而不是稍后在成本上升时留下。它永远不会比现在更容易纠正(但会变得更加困难)... – ircmaxell
IMO,变量并不总是一个坏主意。有时如果明智地使用,它可以减少代码量。 – galymzhan
$$ foo的[0]'应该给你的输出,即使它只是一个**注意**约'B'是未定义的变量消息。这将暗示发生了什么问题。 – salathe
@salathe默认情况下不会有输出。您必须明确地配置PHP以在读取未设置的变量时通知您。 – meagar
@meagar取决于你的意思是“默认”。除此之外,任何遇到代码问题的人在这里都会提出问题,至少应该报告并显示所有错误。 – salathe