📅  最后修改于: 2023-12-03 15:27:40.497000             🧑  作者: Mango
本题考察 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