5

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

0

1 Answer 1

18
  • $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).

Sign up to request clarification or add additional context in comments.

3 Comments

Variable array keys are pretty staple. I've included the PHP manual links for variable variables and variable functions.
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').
+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'))...

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.