基本上,我使用此方便的函数来处理数据库行(请注意PDO和/或其他内容)function fetch($query,$func) { $query = mysql_query($query); while($r = mysql_fetch_assoc($query)) { $func($r); }}使用此功能,我可以简单地执行以下操作:fetch("SELECT title FROM tbl", function($r){ //> $r['title'] contains the title});假设现在我需要将所有内容串联在一起$r['title'](这只是一个示例)。我该怎么办?我当时在想像这样的东西,但是它不是很优雅:$result = '';fetch("SELECT title FROM tbl", function($r){ global $result; $result .= $r['title'];});echo $result;
3 回答
慕少森
TA贡献2019条经验 获得超9个赞
你必须使用use如在文档中所述:
闭包也可以从父范围继承变量。任何此类变量必须在函数头中声明。从父作用域继承变量与使用全局变量不同。全局变量存在于全局范围内,无论执行什么功能,该变量都是相同的。
码:
$result = '';
fetch("SELECT title FROM tbl", function($r) use (&$result) {
$result .= $r['title'];
});
但是要当心(摘自上一链接的评论之一):
use()参数是早期绑定-它们在声明lambda函数时使用变量的值,而不是在调用lambda函数时使用变量的值(后期绑定)。
慕仙森
TA贡献1827条经验 获得超7个赞
重写'fetch'只调用$ func一次呢?
function fetch($query,$func) {
$query = mysql_query($query);
$retVal = array();
while($r = mysql_fetch_assoc($query)) {
$retVal[] = $r;
}
$func($retVal);
}
这样,您将只调用一次$ func并在获取后重新处理该数组?即使对函数调用200次也不是很确定的效果。
- 3 回答
- 0 关注
- 691 浏览
添加回答
举报
0/150
提交
取消