PHP - 将命名函数传递给另一个函数


PHP - Pass named function to another function

我有一个函数collectRows,它接受一个sqli_result对象,并以行数组的形式返回查询结果:

function collectRows($result) {
    ...
}

并具有另一个函数,该函数接受一个函数来决定在返回查询结果之前如何处理查询结果:

function execQuery($query, $resultsF=null) {
    ...    
}

我想像这样使用execQuery

execQuery("SELECT * FROM...", collectRows);

但是我收到抱怨说它找不到常数的"collectRows"。

显然,我可以做这样的事情:

execQuery("SELECT * FROM...", function($result) {
    return collectRows($result);
});

但是,如果能够更简洁地编写它,那就太好了。

有没有办法在不将其包装在匿名函数中的情况下传递命名函数?

函数名称而不是函数本身应该传递给函数:

function execQuery($query, $functionName=null) {
    if (is_callable($functionName)) {
        $functionName();
    }
}

并称之为:

execQuery("SELECT * FROM...", 'collectRows');

有关可调用类型的详细信息。

很简单,您只需将名称作为字符串传递即可。PHP 不在乎,无论如何它都会处理它。