我的目标是创建一个创建变量名称的循环.如:
$variable1
$variable2
$variable3
并在循环内分配值.例如,for loop从1到7产生变量$variable1, $variable2, $variable3,.etc,每个变量都具有迭代器的值.
Rea*_*lar 38
有几种方法.一个是通过字符串和双$,但我不喜欢这种方法.程序员可以轻松删除double $(将其视为typeo).
for($i = 0; $i <= 7; $i++) {
$name = "variable{$i}";
$$name = "foo";
}
Run Code Online (Sandbox Code Playgroud)
最好的方法是明确的陈述.
for($i = 0; $i <= 7; $i++) {
${"variable$i"} = "foo";
}
Run Code Online (Sandbox Code Playgroud)
使用明确的内联字符串,毫无疑问您正在做的事情的意图.另一个PHP程序员不会错误地改变代码.
kvs*_*vsm 15
你应该使用一个数组:
for($i = 1; $i <= 7; $i++) {
$variable[$i] = $i;
}
Run Code Online (Sandbox Code Playgroud)
编辑:澄清一下,你应该使用一个数组,因为没有代码(据我所知)接受$ variable1而不是$ variable [1].动态生成变量名称是各种错误的.
只是为了扩展其他人所说的为什么这是一种最好避免的技术:变量名仅供程序员使用;根据语言的运行时,它们没有关系或属性。因此,相关变量的集合应该放入代表某个适当容器的变量中 - 对于 PHP,其非常灵活的“数组”类型。
每当提出动态命名变量的问题时,通常是因为有人认为它是特定问题的解决方案,但它通常会导致比它解决的问题更多的问题 - 例如,一旦程序的一部分开始动态命名变量,到处都是现在想要使用这些变量还必须动态命名它们;找出实际设置的项目变得不必要的复杂,等等。
在极少数情况下,变量-变量是有用的,例如,对于某些类型的调试和元编程,但像 一样,goto它们在语言中的存在并不意味着您不首先尝试所有其他可能的解决方案。
不过,千分之九百九十九,如果您发现自己想知道如何动态创建变量名称,您应该重新思考这个问题:您实际上想要实现什么目标,以及该问题的最佳解决方案是什么。如果某些现有/第 3 方代码是使用此模式(可能还有全局变量)构建的,那么最好对其进行修补或包装,而不是将错误设计传播到您自己的代码中。(诚然,包装器仍然需要知道如何声明动态变量。)