Recipe 5.4. Creating a Dynamic Variable Name


5.4.1. Problem

You want to construct a variable's name dynamically. For example, you want to use variable names that match the field names from a database query.

5.4.2. Solution

Use PHP's variable variable syntax by prepending a $ to a variable whose value is the variable name you want:

$animal = 'turtles'; $turtles = 103; print $$animal; 103

5.4.3. Discussion

Placing two dollar signs before a variable name causes PHP to de-reference the right variable name to get a value. It then uses that value as the name of your "real" variable. For example:

$animal = 'turtles'; $turtles = 103; print $$animal; 103

This prints 103. Because $animal = 'turtles', $$animal is $turtles, which equals 103.

Using curly braces , you can construct more complicated expressions that indicate variable names:

$stooges = array('Moe','Larry','Curly'); $stooge_moe = 'Moses Horwitz'; $stooge_larry = 'Louis Feinberg'; $stooge_curly = 'Jerome Horwitz'; foreach ($stooges as $s) {   print "$s's real name was ${'stooge_'.strtolower($s)}.\n"; } Moe's real name was Moses Horwitz. Larry's real name was Louis Feinberg. Curly's real name was Jerome Horwitz.

PHP evaluates the expression between the curly braces and uses it as a variable name. That expression can even have function calls in it, such as strtolower( ).

Variable variables are also useful when iterating through similarly named variables. Say you are querying a database table that has fields named title_1, title_2, etc. If you want to check if a title matches any of those values, the easiest way is to loop through them like this:

for ($i = 1; $i <= $n; $i++) {     $t = "title_$i";     if ($title == $$t) { /* match */ } }

Of course, it would be more straightforward to store these values in an array, but if you are maintaining old code that uses this technique (and you can't change it), variable variables are helpful.

The curly brace syntax is also necessary in resolving ambiguity about array elements. The variable variable $$donkeys[12] could have two meanings. The first is "take what's in the 12th element of the $donkeys array and use that as a variable name." Write this as: ${$donkeys[12]}. The second is "use what's in the scalar $donkeys as an array name and look in the 12th element of that array." Write this as: ${$donkeys}[12].

You are not limited by two dollar signs. You can use three, or more, but in practice it's rare to see greater than two levels of indirection.

5.4.4. See Also

http://www.php.net/language.variables.variable for documentation on variable variables.




PHP Cookbook, 2nd Edition
PHP Cookbook: Solutions and Examples for PHP Programmers
ISBN: 0596101015
EAN: 2147483647
Year: 2006
Pages: 445

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net