use*_*454 177 php variables dynamic dynamic-variables
我正在尝试使用动态变量名称(我不确定它们实际上是什么名称)但是非常像这样:
for($i=0; $i<=2; $i++) {
$("file" . $i) = file($filelist[$i]);
}
var_dump($file0);
Run Code Online (Sandbox Code Playgroud)
回报null
告诉我它不起作用.我不知道我正在寻找的语法或技术是什么,这使得研究变得困难.$filelist
早先定义.
Sar*_*raz 483
包裹他们{}
:
${"file" . $i} = file($filelist[$i]);
Run Code Online (Sandbox Code Playgroud)
使用${}
是一种创建动态变量的方法,简单示例:
${'a' . 'b'} = 'hello there';
echo $ab; // hello there
Run Code Online (Sandbox Code Playgroud)
Joh*_*ers 74
在PHP中,您可以$
在变量前添加一个额外的变量,使其成为动态变量:
$$variableName = $value;
Run Code Online (Sandbox Code Playgroud)
虽然我不推荐它,你甚至可以链接这种行为:
$$$$$$$$DoNotTryThisAtHomeKids = $value;
Run Code Online (Sandbox Code Playgroud)
你可以,但不强制放$variableName
之间{}
:
${$variableName} = $value;
Run Code Online (Sandbox Code Playgroud)
{}
只有在变量名称本身是多个值的组合时才使用,如下所示:
${$variableNamePart1 . $variableNamePart2} = $value;
Run Code Online (Sandbox Code Playgroud)
然而,建议始终使用{}
,因为它更具可读性.
总是使用的另一个原因{}
是,PHP5和PHP7处理动态变量的方式略有不同,在某些情况下会导致不同的结果.
在PHP7中,动态变量,属性和方法现在将严格按照从左到右的顺序进行评估,而不是PHP5中特殊情况的混合.以下示例显示评估顺序如何变化.
$$foo['bar']['baz']
${$foo['bar']['baz']}
${$foo}['bar']['baz']
$foo->$bar['baz']
$foo->{$bar['baz']}
$foo->{$bar}['baz']
$foo->$bar['baz']()
$foo->{$bar['baz']}()
$foo->{$bar}['baz']()
Foo::$bar['baz']()
Foo::{$bar['baz']}()
Foo::{$bar}['baz']()
Joa*_*son 20
尝试使用{}
而不是()
:
${"file".$i} = file($filelist[$i]);
Run Code Online (Sandbox Code Playgroud)
小智 5
我经常对查询返回的结果进行此操作。
例如
// $MyQueryResult is an array of results from a query
foreach ($MyQueryResult as $key=>$value)
{
${$key}=$value;
}
Run Code Online (Sandbox Code Playgroud)
现在,我可以只使用$ MyFieldname(在echo语句中更容易使用),而不是$ MyQueryResult ['MyFieldname']
是的,这可能很懒,但是我从来没有遇到任何问题。