【问题标题】:variable-variables in PHPPHP中的变量变量
【发布时间】:2011-04-08 09:42:29
【问题描述】:

我知道你可以这样做:$hash('foo')$$foo 以及 $bar[$foo],它们分别叫什么?

【问题讨论】:

    标签: php variable-variables


    【解决方案1】:
    • $hash('foo') 是一个变量函数。
      $hash 可能包含一个带有函数名的字符串,或者一个匿名函数。

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

      $foo = 'bar';
      $bar = 'baz';
      
      // This means echo $bar;
      // Output: baz
      echo $$foo;
      
    • $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];
      

    PHP 手册有一篇关于variable variables 的文章,还有一篇关于anonymous functions 的文章(但我没有在上面展示后者的示例)。

    【讨论】:

    • 可变数组键是非常重要的。我已经包含了变量变量和变量函数的 PHP 手册链接。
    • 如果您使用扩展变量语法,事情会变得非常有趣。这允许像${'prefix_' . $name} 这样的东西,甚至像${$var = 'var'} 这样更有趣的东西(这是'var')。
    • +1:“变量函数”调用也可用于声明__invoke 魔术方法的对象(自 PHP 5.3 起)。因此它可以处理字符串函数名称、create_function() 的返回值、Closure 对象(在 5.3 之后使用匿名函数时创建)或声明__invoke 方法的通用对象。可惜不能在其他回调类型上使用(array('classname', 'methodname'))...
    猜你喜欢
    • 2010-11-23
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多