可变变量
有时候使用可变变量名是很方便的。就是说,一个变量的变量名可以动态的设置和使用。一个可变变量获取了一个普通变量的值作为这个可变变量的变量名。
<?php
$foo = 'bar';
$$foo = 'baz';
var_dump($foo); // string(3) "bar"
var_dump($bar); // string(3) "baz"
要将可变变量用于数组,必须解决一个模棱两可的问题。
<?php
$foo = ['foo', 'bar', 'baz', 'qux'];
$bar = 'bar';
var_dump(${$foo[1]}); // string(3) "bar"
$foo = 'bar';
$bar = ['foo', 'bar', 'baz', 'qux'];
var_dump(${$foo}[1]); // string(3) "bar"
类的属性也可以通过可变属性名来访问。可变属性名将在该调用所处的范围内被解析。
<?php
class Foo
{
/**
* Just a test property.
*
* @var string
*/
public string $bar = 'BAR';
/**
* Just a test property.
*
* @var array
*/
public array $baz = ['FOO', 'BAR', 'BAZ', 'QUX'];
}
$foo = new Foo();
$bar = 'bar';
$baz = 'baz';
$qux = ['foo', 'bar', 'baz', 'qux'];
var_dump($foo->$bar); // string(3) "BAR"
var_dump($foo->{$baz}[2]); // string(3) "BAZ"
var_dump($foo->{$qux[1]}); // string(3) "BAR"