无法为类方法设置闭包

时间:2013-02-18 15:54:58

标签: php closures lambda

我正在构建一个类,到目前为止有类似于下面的内容

在main.php中

$coolObject = new CoolObject(true);

foreach($array as $key=>$val)
{
    $coolObject->doFunction($val);
}

然后在CoolObject内部:

class CoolObject
{
    private $_useFunction;

    public function __construct($useFoo)
    {
        //THIS IS WHERE I NEED HELP
        if($useFoo){
            $this->_useFunction = $this->_foo();
        }
        else{
            $this->_useFunction = $this->_bar();
        }
    }

    public function doFunction($values)
    {
        $this->_useFunction($values);
    }

    private function foo($values){
        //do stuff
    }

    private function bar($values){
        //do other stuff
    }
}

我意识到我可以把一个if语句或切换到可以处理这个功能的doFunction,但是因为我不熟悉闭包/ lamdas我不确定这是否适合他们或者我是不是完全偏离基地

1 个答案:

答案 0 :(得分:1)

你想要实现的(据我所知)是PHP中的函数指针。

你应该看看:Array Pointer to a function in PHP

我仍然认为继承将是解决这个问题的最简单/最简洁的方法。

所以你可能会以:

结束

类CoolObject {     private $ _useFunction;

public function __construct($useFoo)
{
    //THIS IS WHERE I NEED HELP
    if($useFoo){
        $this->_useFunction = 'foo';
    }
    else{
        $this->_useFunction = 'bar';
    }
}

public function doFunction($values)
{
//Edited as @newacct corrects
$this->$_useFunction($values); 
}

private function foo($values){
    //do stuff
}

private function bar($values){
    //do other stuff
}

}