php在实例中设置匿名函数

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)


Cha*_*les 5

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的情况下尝试做什么.不幸的是,过去很难让函数调用链工作.