gee*_*kay 7 php class instance anonymous-function
我刚刚开始使用PHP,我想知道是否有一种方法可以将匿名函数添加到类实例中.
例如,让我们说......
class A{
public B;
}
$c = new A();
//This is where I am getting a little confused...
//The following wont work
$c->B = function(){echo('HelloWorld');};
$c->B();
Run Code Online (Sandbox Code Playgroud)
我希望做的是在大量不同的应用程序中重用相同的代码,并使其能够"替换"并替换特定实例中的函数.
我使用php5.3(所以匿名函数应该工作,只是不是我使用它们的方式).
非常感谢您的时间!
-GK
Max*_*Ruf 10
您可以使用__call magic函数执行此作业.不是美女,但它有效..
像这样:
class A {
public $B;
public function __call($closure, $args)
{
call_user_func_array($this->$closure, $args);
}
}
$c = new A();
$c->B = function () { echo('HelloWorld'); };
$c->B();
Run Code Online (Sandbox Code Playgroud)
FWIW:
PHP 5.3对匿名函数的处理很有趣.这不起作用:
$c->B = function() { echo func_get_arg(0); };
$c->B("This fails :(");
Run Code Online (Sandbox Code Playgroud)
这将工作:
$c->B = function() { echo func_get_arg(0); };
$hilarious = $c->B;
$hilarious("This works!");
Run Code Online (Sandbox Code Playgroud)
要解决这个问题,你需要使用__call像奥登提供的黑客.
此行为将来可能会发生变化.解除引用RFC的数组最近被提交到PHP的主干,并且补丁引发了关于函数调用链的讨论,其语法可能允许你在没有__call hack的情况下尝试做什么.不幸的是,过去很难让函数调用链工作.