php - 不能调用包裹在闭包中的闭包?

标签 php

如果我将一个闭包包裹在另一个闭包中,我将无法调用嵌套的闭包。为什么不?我认为一个例子最能说明问题。

这段 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/

相关文章:

php - MySQL 查询不适用于 NOT IN

php - 在Docker上使用Php/Nginx的Craft CMS无法在文档根目录之外编写

php - 在 PDO 和其他一些东西中尝试 catch vs if else

PHP_NEW_EXTENSION() 什么都不做

php - 更新 Magento 特价

php - Symfony2 环境特定的 robots.txt

php - 使用 PHP 验证非私有(private) IP 地址

php - Pear 在显示不同版本号的窗口上

php - 获取复选框文本值

php - SQL 列出最喜欢的游戏数据库