I know you can do: $hash('foo') and $$foo and also $bar[$foo], what are each of these things called?
            Asked
            
        
        
            Active
            
        
            Viewed 245 times
        
    5
            
            
        1 Answers
18
            - $hash('foo')is a variable function.
 - $hashmay contain a string with the function name, or an anonymous function.- $hash = 'md5'; // This means echo md5('foo'); // Output: acbd18db4cc2f85cedef654fccc4a4d8 echo $hash('foo');
- $$foois a variable variable.
 - $foomay contain a string with the variable name.- $foo = 'bar'; $bar = 'baz'; // This means echo $bar; // Output: baz echo $$foo;
- $bar[$foo]is a variable array key.
 - $foomay contain anything that can be used as an array key, like a numeric index or an associative name.- $bar = array('first' => 'A', 'second' => 'B', 'third' => 'C'); $foo = 'first'; // This tells PHP to look for the value of key 'first' // Output: A echo $bar[$foo];
The PHP manual has an article on variable variables, and an article on anonymous functions (but I didn't show an example above for the latter).
 
    
    
        BoltClock
        
- 700,868
- 160
- 1,392
- 1,356
- 
                    Variable array keys are pretty staple. I've included the PHP manual links for variable variables and variable functions. – BoltClock Sep 05 '10 at 07:57
- 
                    1Things get really funny if you use the extended variable syntax. This allows stuff like `${'prefix_' . $name}` or even funnier things like `${$var = 'var'}` (this is `'var'`). – NikiC Sep 05 '10 at 08:17
- 
                    3+1: "Variable function" calls can also be used on objects that declare an `__invoke` magic method (Since PHP 5.3). So it can handle string function names, the return from `create_function()`, a `Closure` object (which is created when you use anonymous functions since 5.3) or a generic object which declares a `__invoke` method. It's too bad you can't use it on other callback types (`array('classname', 'methodname')`)... – ircmaxell Sep 05 '10 at 08:37
