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

时间:2016-02-21 20:51:28

标签: php

我有一个接受sqli_result对象的函数collectRows,并将查询结果作为行数组返回:

function collectRows($result) {
    ...
}

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

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

我想像execQuery这样使用:

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

但是我抱怨它无法找到常数“collectRows”。

显然,我可以这样做:

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

但是能够更简洁地写出它会更好。

有没有办法传递命名函数而不将其包装在匿名函数中?

2 个答案:

答案 0 :(得分:2)

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

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

并称之为:

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

有关callable type的更多信息。

答案 1 :(得分:1)

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