繁体   English   中英

PHP - 如何在循环中创建变量名称?

[英]PHP - How Can I Create Variable Names Within a Loop?

我的目标是创建一个创建变量名的循环。 如:

$variable1
$variable2
$variable3

并在循环内赋值。 例如,从 1 到 7 的for loop产生变量$variable1, $variable2, $variable3, .etc,每个变量都有迭代器的值。

有几种方法。 一种是通过字符串和双$ ,但我不喜欢这种方法。 程序员可以轻松删除双$ (将其视为类型)。

for($i = 0; $i <= 7; $i++) {
     $name = "variable{$i}";
     $$name = "foo";
}

最好的方法是显式声明。

for($i = 0; $i <= 7; $i++) {
     ${"variable$i"} = "foo";
}

使用显式内联字符串,您所做的事情的意图是毫无疑问的。 另一个 PHP 程序员不会错误地更改代码。

您应该为此使用一个数组:

for($i = 1; $i <= 7; $i++) {
  $variable[$i] = $i;
}

编辑:澄清一下,你应该使用一个数组,因为没有代码(据我所知)接受 $variable1 但不接受 $variable[1]。 动态生成变量名是各种各样的错误。

只是为了扩展其他人所说的为什么这是一种最好避免的技术:变量名称仅供程序员使用; 根据语言的运行时,它们没有关系或属性。 因此,应该将一组相关变量放入一个代表某个适当容器的变量中——在 PHP 的情况下,它是非常灵活的“数组”类型。

每当提出动态命名变量的问题时,通常是因为有人认为它是对特定问题的解决方案,但它通常导致的问题比它解决的要多——例如,一旦程序的一部分开始动态命名变量,无处不在想要使用这些变量的现在必须动态命名它们; 找出实际设置的项目变得不必要地复杂,依此类推。

变量变量在极少数情况下很有用,例如,对于某些类型的调试和元编程,但与goto一样,它们在语言中的存在不意味着您不会首先尝试所有其他可能的解决方案。

但是,1000 次中有 999 次,如果您发现自己想知道如何动态创建变量名,您应该重新思考这个问题:您实际上想要实现什么,以及该问题的最佳解决方案是什么。 如果某些现有的/第 3 方代码已使用此模式(可能还有全局变量)构建,最好修补或包装它,而不是将错误设计传播到您自己的代码中。 (诚​​然,包装器仍然需要知道如何声明动态变量。)

如果你有一个关联数组,我更喜欢使用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";

?>

上面的代码将输出, blue, large, sphere, medium

如果有人想通过一个对象来做到这一点:

<?php 
        $x = 1;
        while($x <= 4){
        echo $q->{"a$x"}; 
        $x++;
?>

那是不可能的,因为不能在运行时创建变量

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM