Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为类方法设置闭包时遇到问题_Php_Closures_Lambda - Fatal编程技术网

Php 为类方法设置闭包时遇到问题

Php 为类方法设置闭包时遇到问题,php,closures,lambda,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)

我正在设计一个类,到目前为止大致如下

在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
    }
}

我意识到我可以在doFunction中加入if语句或开关来处理这个功能,但由于我不熟悉闭包/lamdas,所以我不确定这是否适合它们,或者我只是完全偏离了基准(据我所知),您试图实现的是PHP中的函数指针

你真的应该看看:

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

因此,您可能会以以下内容结束:

类CoolObject { 私有$useu函数

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
}

}

PHP不是JS。尝试阅读有关变量的内容:另外,您可能可以使用inheritance@Juan我想继承可能会得到这个结果,但由于这两个版本之间只有一个函数不同,我想我会看看这是否是在变量中存储函数的好方法,如果这是闭包的正确用法,因为这个概念对我来说还是相当新的。如果我不能让它工作,我绝对会使用继承。这就是我一直在寻找的东西(因为它曾经为我出现过)。不过,我可能仍然会使用继承。感谢您的帮助,而不是
call\u user\u func($this->$\u useFunction,$values)
您只需执行
$this->$\u useFunction($values)