【发布时间】:2011-04-08 09:42:29
【问题描述】:
我知道你可以这样做:$hash('foo') 和 $$foo 以及 $bar[$foo],它们分别叫什么?
【问题讨论】:
我知道你可以这样做:$hash('foo') 和 $$foo 以及 $bar[$foo],它们分别叫什么?
【问题讨论】:
$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 的文章(但我没有在上面展示后者的示例)。
【讨论】:
${'prefix_' . $name} 这样的东西,甚至像${$var = 'var'} 这样更有趣的东西(这是'var')。
__invoke 魔术方法的对象(自 PHP 5.3 起)。因此它可以处理字符串函数名称、create_function() 的返回值、Closure 对象(在 5.3 之后使用匿名函数时创建)或声明__invoke 方法的通用对象。可惜不能在其他回调类型上使用(array('classname', 'methodname'))...