在PHP中使用带有动态变量名称的大括号?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (244)

我想使用动态变量名(我不确定它们的实际名称是什么),但大致如下:

for($i=0; $i<=2; $i++) {
    $("file" . $i) = file($filelist[$i]);
}

var_dump($file0);

返回是null这说明它不起作用了。

提问于
用户回答回答于

把他们包装在{}

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

示例

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

${'a' . 'b'} = 'hello there';
echo $ab; // hello there
用户回答回答于

在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']()

扫码关注云+社区

领取腾讯云代金券