我的目标是创建一个循环,其中创建变量名。例如:
$variable1
$variable2
$variable3
并在循环内为其赋值。例如,从1到7的for循环
将产生变量$variable1,$variable2,$variable3
等,每个变量的值都是迭代器的值。
我的目标是创建一个循环,其中创建变量名。例如:
$variable1
$variable2
$variable3
并在循环内为其赋值。例如,从1到7的for循环
将产生变量$variable1,$variable2,$variable3
等,每个变量的值都是迭代器的值。
有几种方法。其中一种是使用字符串和双倍符号$
,但我不喜欢这种方法。程序员可能会轻易地删除双倍符号$
(认为它是拼写错误)。
for($i = 0; $i <= 7; $i++) {
$name = "variable{$i}";
$$name = "foo";
}
最好的方法是明确陈述。
for($i = 0; $i <= 7; $i++) {
${"variable$i"} = "foo";
}
使用显式的内联字符串,可以消除关于你所做的意图的疑虑。另一个 PHP 程序员不会错误地更改代码。
$variable{$i}
视为尝试索引变量$variable
中的数组元素或字符串字节的操作,就像$variable[$i]
一样;如果给定一个未设置的值,它会优先选择数组。因此,在这里,您实际上正在初始化一个索引数组,而不是所请求的一组命名变量。 - IMSoP你应该使用数组来实现这个:
for($i = 1; $i <= 7; $i++) {
$variable[$i] = $i;
}
编辑: 为澄清起见,你应该使用数组,因为(据我所知)没有可以接受$variable1但不接受$variable[1]的代码。动态生成变量名是完全错误的。
每当动态命名变量的问题被提出时,通常是因为有人认为它是解决特定问题的方法,但它通常会带来比解决更多的问题-例如,一旦程序的一部分开始动态命名变量,现在想要使用这些变量的任何地方也必须动态命名它们;找出哪些项目实际上已设置变得不必要复杂,等等。
有极少数情况下,变量变量对于某些调试和元编程非常有用,但像goto
一样,它们在语言中的存在不应意味着您不首先尝试每种可能的解决方案。
虽然在1000次中有999次,如果你发现自己在思考如何动态创建变量名,你应该重新提出问题:你实际上想要实现什么,以及最好的解决方案是什么。如果一些现有的/第三方代码使用了这种模式(并且可能也使用了全局变量),那么最好的做法是修补或包装它,而不是将错误设计传播到你自己的代码中。(不可否认,包装器仍需要知道如何声明动态变量。)
extract()
方法。在这里查看。<?php
/* Suppose that $var_array is an array*/
$var_array = array("color" => "blue",
"size" => "medium",
"shape" => "sphere");
extract($var_array, EXTR_PREFIX_SAME, "wddx");
echo "$color, $size, $shape";
?>
蓝色,大号,球体,中号
。如果有人想通过对象来实现这个:
<?php
$x = 1;
while($x <= 4){
echo $q->{"a$x"};
$x++;
?>
这是不可能的,因为变量不能在运行时创建。