如果我将一个闭包包裹在另一个闭包中,我将无法调用嵌套的闭包。为什么不?我认为一个例子最能说明问题。
这段 PHP 代码:
function FInvoke($func) {
$func();
}
FInvoke(function () { echo "Direct Invoke Worked\n"; });
按预期工作并打印“Direct Invoke Worked”。
但是,如果我稍微修改它以添加另一个间接级别,它就会失败:
function FInvoke($func) {
$func();
}
function FIndirectInvoke($func) {
FInvoke(function () {
$func();
});
}
FIndirectInvoke(function () { echo "Never makes it here"; });
失败消息是“ fatal error :函数名必须是 file.php 中第 X 行的字符串”
最佳答案
您必须使用“use”关键字将 $func 传递给内部 lambda
function FInvoke($func) {
$func();
}
function FIndirectInvoke($func) {
FInvoke(function () use($func) { // <--- here
$func();
});
}
FIndirectInvoke(function () { echo "ok"; });
关于php - 不能调用包裹在闭包中的闭包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7618834/