【问题标题】:How do I build a dynamic variable with PHP?如何使用 PHP 构建动态变量?
【发布时间】:2010-11-02 22:30:35
【问题描述】:

我正在尝试在 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>

希望这有助于更好地解释事情。 :)

【问题讨论】:

  • 变量-变量是邪恶的,应该避免。特别是在您的情况下,即使您在编写它时也无法弄清楚......想象一下当您需要修复错误时,弄清楚一年中发生的事情将是多么困难。编写可读的代码。写简单的代码...
  • @ircmaxell 它可以简化代码,甚至使其更具可读性。例如,想象一个工厂,巨大的开关(创建几十个类),而不是这段代码:factory($class_name){return new $class_name()}
  • @Itay Moav:在这种情况下,如果你添加一个不存在的 $class_name,你的应用就会死掉。
  • @Itay Moav:我不认为这是一个变量。当然这是一个非常相似的概念(类似于$foo($bar)),但我说的是$$foo${$foo}...其中变量被存储在另一个变量中的名称引用(变量的真实定义-变量)...
  • @Stegeman 只是为了展示这个想法,添加 is_class 或类似的东西很容易,并且有一个默认类。

标签: php variables dynamic


【解决方案1】:

为什么您认为在这里需要动态变量?这不只是做你想做的事吗:

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

【讨论】:

    【解决方案2】:

    在此示例中,您不需要动态变量。

    如果 $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

    【讨论】:

      【解决方案3】:
      $foo = "hello";
      
      $$foo = " world";
      
      //echo $foo.$$foo;
      
      echo $foo.$hello;
      

      【讨论】:

      • 更正确的解释:$foo = "hello"; $$foo = " world"; echo $foo.$hello;
      • 输出“你好”。因为 $foo 有一个空格。)
      【解决方案4】:

      您似乎将 variable variables 与旧的 array 键混淆了。变量变量是一种机制,它允许将值读取(或写入)到名称未知或可以更改的变量中,老实说,它们几乎没有必要:

      <?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 中,数组键可以是整数或字符串,但它不需要是文字:您可以从变量中检索键。

      【讨论】:

        【解决方案5】:
        $foo='bobo';
        echo $foo;//"bobo"
        $$foo='koko';
        echo $$foo;//"koko"
        echo $bobo;//"koko"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-03-19
          • 2021-04-19
          • 1970-01-01
          • 2013-03-25
          • 2014-05-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多