📌  相关文章
📜  网络技术问题 | PHP测验 |设置 1 |问题 11(1)

📅  最后修改于: 2023-12-03 15:27:40.497000             🧑  作者: Mango

网络技术问题 | PHP测验 |设置 1 |问题 11

本题考察 PHP 中的闭包。

问题描述

下列代码的输出结果是什么?

function createClosure($i)
{
    return function() use($i)
    {
        return ++$i;
    };
}

$c1 = createClosure(0);
$c2 = createClosure(0);

echo $c1() . " ";
echo $c2() . " ";
echo $c1() . " ";
echo $c2() . " ";
解题思路

该题涉及到 PHP 中的闭包概念。闭包是指一个函数和其所在环境中的变量相互绑定形成的实体。在 PHP 中,闭包可以通过 function() use($var) 的形式定义。

在上述代码中,createClosure() 函数返回一个闭包,和 $i 变量相互绑定。于是,当我们多次调用 $c1()$c2() 时,闭包中所绑定的 $i 变量值会跟着变化。

具体来说,当我们第一次调用 $c1() 时,闭包中的 $i 变量值为 0,执行完后会将 $i 的值加 1,结果为 1。接下来,当我们第一次调用 $c2() 时,闭包中的 $i 变量值同样为 0,而 $c1() 在之前已经执行过了,将 $i 的值加 1 变为 1,因此此时 $c2() 的结果为 1。之后,两个闭包的调用结果分别为 2 和 2。

综上,该代码的输出结果为:

1 1 2 2
参考资料