php – 无法调用包含在闭包中的闭包?

如果我在另一个闭包中包装一个闭包,我就不能调用嵌套闭包.为什么不?我认为一个例子最能说明问题.

这个PHP代码

function FInvoke($func) {
    $func();
}

FInvoke(function () { echo "Direct Invoke Worked\n"; });

按预期工作并打印“直接调用工作”.

但是,如果我稍微修改它以添加另一级别的间接,它将失败:

function FInvoke($func) {
    $func();
}

function FIndirectInvoke($func) {
    FInvoke(function () {
        $func();
    });
}

FIndirectInvoke(function () { echo "Never makes it here"; });

失败消息是“致命错误函数名称必须是第X行的file.PHP中的字符串”

解决方法:

你必须使用“use”关键字将$func传递给内部lambda

function FInvoke($func) {
    $func();
}

function FIndirectInvoke($func) {
    FInvoke(function () use($func) { // <--- here
        $func();
    });
}

FIndirectInvoke(function () { echo "ok"; });

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...