PHP中的变量变量

Joh*_*nny 5 php variable-variables

我知道你可以这样做:$hash('foo')$$foo$bar[$foo],每这些东西叫什么?

Bol*_*ock 18

  • $hash('foo')是一个可变函数.
    $hash可以包含带有函数名称的字符串或匿名函数.

    $hash = 'md5';
    
    // This means echo md5('foo');
    // Output: acbd18db4cc2f85cedef654fccc4a4d8
    echo $hash('foo');
    
    Run Code Online (Sandbox Code Playgroud)
  • $$foo是一个变量变量.
    $foo可能包含带有变量名称的字符串.

    $foo = 'bar';
    $bar = 'baz';
    
    // This means echo $bar;
    // Output: baz
    echo $$foo;
    
    Run Code Online (Sandbox Code Playgroud)
  • $bar[$foo]是一个变量数组键.
    $foo可以包含任何可以用作数组键的内容,例如数字索引或关联名称.

    $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];
    
    Run Code Online (Sandbox Code Playgroud)

PHP手册有一篇关于变量变量的文章,以及一篇关于匿名函数的文章(但我没有在上面给出一个例子).

  • +1:"变量函数"调用也可用于声明`__invoke`魔术方法的对象(自PHP 5.3起).因此它可以处理字符串函数名称,从`create_function()`返回,一个`Closure`对象(从5.3开始使用匿名函数时创建)或声明`__invoke`方法的泛型对象.太糟糕了,你不能在其他回调类型上使用它(`array('classname','methodname')`)... (3认同)