我喜欢jQuery/Javascript通过闭包扩展功能的方式.是否有可能在PHP 5.3中做类似的事情?
class Foo
{
public $bar;
}
$foo = new Foo;
$foo->bar = function($baz) { echo strtoupper($baz); };
$foo->bar('lorem ipsum dolor sit amet');
// LOREM IPSUM DOLOR SIT AMET
Run Code Online (Sandbox Code Playgroud)
[编辑]在我的问题中混淆了'它'和'是'.嘿嘿.
我下载了5.3a3,它确实有效!
class Foo
{
protected $bar;
public $baz;
public function __construct($closure)
{
$this->bar = $closure;
}
public function __call($method, $args)
{
$closure = $this->$method;
call_user_func_array($closure, $args);
}
}
$foo = new Foo(function($name) { echo "Hello, $name!\n"; });
$foo->bar('Mon');
// Hello, Mon!
$foo->baz = function($s) { echo strtoupper($s); };
$foo->baz('the quick brown fox jumps over the lazy dog');
// THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
Run Code Online (Sandbox Code Playgroud)
PHP 可以通过create_function()。虽然它的语法几乎完全没有用,但它的语法却很复杂。
看来PHP5.3+正在获得/已经支持闭包和 lambda!
然而也来自RFC
Lambda 函数/闭包不是在运行时通过附加方法动态扩展类的方法。还有其他几种可能性可以做到这一点,包括已经存在的 __call 语义。