php - include inside 闭包

标签 php include return closures

我有几个 php 文件要包含,它们必须在 protected 范围内充当函数。闭包旨在加载它们(包括)并执行。尽管我在编写这些闭包时遇到了奇怪的影响。所有 php 文件都以 return 语句结尾。

function myClosure () { 
    include 'file.php';
    return $closure;         // initialized in file.php
};
$func = myClosure();
echo $func('1');             // echoes '2'
echo $func('4');             // echoes '8'

其中 file.php 类似于

<?php
$closure = function($a) {
    $b = $a + $a;
    return $b;
};
?>

这行得通。但是,我希望在主代码中而不是在外部文件中包含周围的闭包“function($b)”(没有“return”)。遗憾的是,以下内容无法按预期工作:

function myClosure () { 
    $closure = function($a) {
        include 'file.php';
    };
    return $closure; 
};
$func = myClosure();
echo $func('1');             // echoes null
echo $func('4');             // echoes null

其中 file.php 类似于

<php
$b = $a + $a;
return $b;
?>

将 include 更改为 include_once 对第一个示例给出相同的结果,而不是第二个示例:第二个 echo 无法运行。 我现在怀疑这种行为是一个错误 (php 5) 或由于使用 include 做了一些非法的把戏。也许代码中的“返回”绑定(bind)到它们的上下文? 我将不胜感激一些帮助,无论是关于干净编码的类(class),还是正确的技巧。

最佳答案

由于闭包是有作用域的(正如 OP 已经提到的),您必须在 myClosurereturn

你现在有:

function myClosure () {
    $closure = function($a) {
       include 'file.php';
    };
    return $closure;
};

只需将其更改为:

function myClosure () {
    $closure = function($a) {
        return include 'file.php';
    };
    return $closure;
};

您应该会收到以下内容:

int(2) int(4)

鉴于您维护

$func = myClosure();
var_dump($func('1')); 
var_dump($func('2'));

关于php - include inside 闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40843931/

相关文章:

entity-framework - Entity Framework 包括扩展返回大量数据

java - 当任何一个 ListArray 具有重复元素时,计算 ListArray 的数量

php - 预准备语句中 mysqli select 语句中 LIKE/OR 运算符的问题

php - 语法错误:MySQL Insert Select

c++ - 如何在 cmake 中检查给定的头文件是否可用于 C++ 项目

linux - 如何在系统级别将目录添加到 Perl 库路径?

跨域的 PHP 共享 session

javascript - 点击事件时从数据库获取价格

java - 如何检查一个单词是否包含一个字母或一组字母?

python-3.x - tkinter 按钮可以从单击条目中返回值吗?