Heim  >  Fragen und Antworten  >  Hauptteil

Verwendung von geschweiften Klammern mit dynamischen Variablennamen in PHP

<p>Ich versuche, dynamische Variablennamen zu verwenden (ich bin mir nicht sicher, wie sie tatsächlich heißen), aber etwa so: </p> <pre class="brush:php;toolbar:false;">for($i=0; $i<=2; $i++) { $("file" . $i) = file($filelist[$i]); } var_dump($file0);</pre> <p>gibt <code>null</code> zurück, was mir sagt, dass es nicht funktioniert. Ich weiß nicht, nach welcher Syntax oder Technologie ich suche, was die Recherche erschwert. <code>$filelist</code> wurde bereits zuvor definiert. </p>
P粉717595985P粉717595985389 Tage vor431

Antworte allen(2)Ich werde antworten

  • P粉588660399

    P粉5886603992023-08-30 10:02:10

    概述

    在 PHP 中,您只需在变量前面添加一个额外的 $ 即可使其成为动态变量:

    $$variableName = $value;

    虽然我不推荐这样做,但您甚至可以链接此行为:

    $$$$$$$$DoNotTryThisAtHomeKids = $value;

    您可以但不强制将 $variableName 放在 {} 之间:

    ${$variableName} = $value;

    仅当变量名称本身是多个值的组合时,才强制使用 {},如下所示:

    ${$variableNamePart1 . $variableNamePart2} = $value;

    不过,建议始终使用 {},因为它更具可读性。

    PHP5 和 PHP7 之间的差异

    始终使用 {} 的另一个原因是 PHP5 和 PHP7 处理动态变量的方式略有不同,这在某些情况下会导致不同的结果。

    在 PHP7 中,动态变量、属性和方法现在将严格按照从左到右的顺序进行计算,而不是 PHP5 中混合特殊情况。下面的示例显示了评估顺序是如何变化的。

    情况 1:$$foo['bar']['baz']

    • PHP5 解释:${$foo['bar']['baz']}
    • PHP7 解释:${$foo}['bar']['baz']

    情况 2:$foo->$bar['baz']

    • PHP5 解释:$foo->{$bar['baz']}
    • PHP7 解释:$foo->{$bar}['baz']

    情况 3:$foo->$bar['baz']()

    • PHP5 解释:$foo->{$bar['baz']}()
    • PHP7 解释:$foo->{$bar}['baz']()

    情况 4:Foo::$bar['baz']()

    • PHP5 解释:Foo::{$bar['baz']}()
    • PHP7 解释:Foo::{$bar}['baz']()

    Antwort
    0
  • P粉043295337

    P粉0432953372023-08-30 09:41:31

    将它们包裹在 {} 中:

    ${"file" . $i} = file($filelist[$i]);

    工作示例


    使用${}是创建动态变量的一种方法,简单的例子:

    ${'a' . 'b'} = 'hello there';
    echo $ab; // hello there

    Antwort
    0
  • StornierenAntwort