Sometimes it is useful to set and use variables dynamically.
Normally, you assign a variable like this:
$var = "hello";
Now let's say you want a variable whose name is the
value of
the $var variable. You can do that like this:
$$var = "World";
PHP parses $$var by first dereferencing the innermost
variable, meaning that $var becomes "hello". The
expression
that's left is $"hello", which is just $hello.
In other words,
we have just created a new variable
named hello and assigned it the
value "World".
You can nest dynamic variables to an infinite level in
PHP, although once you get beyond two levels, it
can be very confusing for
someone who is trying to read your code.
There is a special syntax for using dynamic variables, and
any
other complex variable, inside quoted strings in PHP:
echo "Hello ${$var}";
This syntax also helps resolve an ambiguity that occurs when
variable arrays are used. Something like $$var[1] is
ambiguous because
it is impossible for PHP to know which
level to apply the array index to.
${$var[1]} tells
PHP to dereference the inner level first and apply the
array index to the result before dereferencing the outer level.
${$var}[1], on the other hand, tells PHP to apply the index
to the
outer level.
Initially, dynamic variables may not seem that useful, but
there
are times when they can shorten the amount of code you need
to write to
perform certain tasks. For example, say you have
an associative array that looks
like:
$array["abc"] = "Hello"; $array["def"] = "World";
Associative arrays like this are returned by various functions
in the PHP modules. mysql_fetch_array() is one example.
The indices in
the array usually refer to fields or entity names
within the context of the
module you are working with. It's
handy to turn these entity names into real PHP
variables,
so you can refer to them as simply $abc and $def.