PHP 通过名称动态访问变量(变量)
示例
可以通过动态变量名称访问变量。变量的名称可以存储在另一个变量中,从而可以动态访问它。这样的变量称为变量变量。
要将变量转换为变量变量,请$在变量前面放置一个多余的内容。
$variableName = 'foo';$foo = 'bar';
// The following are all equivalent, and all output "bar":
echo $foo;
echo ${$variableName};
echo $$variableName;
//similarly,
$variableName = 'foo';
$$variableName = 'bar';
// 以下语句也将输出“ bar”
echo $foo;
echo $$variableName;
echo ${$variableName};
变量变量对于映射函数/方法调用很有用:
function add($a, $b) {return $a + $b;
}
$funcName = 'add';
echo $funcName(1, 2); // 输出3
这在PHP类中特别有用:
class myClass {public function __construct() {
$functionName = 'doSomething';
$this->$functionName('Hello World');
}
private function doSomething($string) {
echo $string; // Outputs "Hello World"
}
}
可能但不必须$variableName介于两者之间{}:
${$variableName} = $value;
以下示例是等效的,并输出“ baz”:
$fooBar = 'baz';$varPrefix = 'foo';
echo $fooBar; // Outputs "baz"
echo ${$varPrefix . 'Bar'}; // Also outputs "baz"
{}仅当变量名称本身是表达式时才使用,例如:
${$variableNamePart1 . $variableNamePart2} = $value;
但是,建议始终使用{},因为它更具可读性。
虽然不建议这样做,但是可以将以下行为链接起来:
$$$$$$$$DoNotTryThisAtHomeKids = $value;
需要注意的是,许多开发人员认为过度使用变量变量是一种不良做法。由于它们不适合现代IDE进行静态分析,因此带有许多变量(或动态方法调用)的大型代码库很快会变得难以维护。
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']()
以上是 PHP 通过名称动态访问变量(变量) 的全部内容, 来源链接: utcz.com/z/348700.html