Переменная переменная по сути является массивом (карта / словарь). Ниже приведены эквивалентные идеи:
<?php
$foo = array('a' => 1);
$bar = 'a';
echo $foo[$bar]."\n";
$foo_a = 1;
$bar = 'a';
$vv = "foo_$bar";
echo $$vv."\n";
?>
Таким образом, если вы поместите свои «переменные переменные» в родительский массив, вы можете покончить с ними.
Я видел, как люди используют переменные свойства внутри классов:
<?php
class Foo
{
private $a = 1;
public function __get($key)
{
if (isset($this->$key)) return $this->$key;
}
}
$foo = new Foo();
echo $foo->a;
?>
Но опять же, вы можете использовать массив:
<?php
class Foo
{
private $props = array('a' => 1);
public function __get($key)
{
if (array_key_exists($key, $this->props))
return $this->props[$key];
}
}
$foo = new Foo();
echo $foo->a;
?>
И вне классов:
<?php
class Foo
{
public $a = 1;
}
$foo = new Foo();
$prop = 'a';
echo $foo->{$prop};
?>
Таким образом, вам никогда не придется использовать переменные переменные или свойства переменных при написании собственного управляемого кода. Мое личное предпочтение - никогда не использовать переменные переменные. Я иногда использую свойства переменных, но предпочитаю использовать массивы, когда буду получать доступ к данным таким образом.