views:

108

answers:

1

I know you can do: $hash('foo') and $$foo and also $bar[$foo], what are each of these things called?

+17  A: 
  • $hash('foo') is a variable function.
    $hash may contain a string with the function name, or an anonymous function.

    $hash = 'md5';
    
    
    // This means echo md5('foo');
    // Output: acbd18db4cc2f85cedef654fccc4a4d8
    echo $hash('foo');
    
  • $$foo is a variable variable.
    $foo may 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.
    $foo may 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
wow, I got it correct by guessing. Can you cite this though?
Johnny
Variable array keys are pretty staple. I've included the PHP manual links for variable variables and variable functions.
BoltClock
Things 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
+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
Is someone jealous? :)
BoltClock