我无法理解这段代码,可以请别人向我解释一下吗?
<?php
$i = 0;
$func1 = function() use ($i) { echo "$i"; };
$func2 = function() use (&$i) { echo "$i"; };
for ( $i=1; $i<=5; $i++ ) {
$func1();
$func2();
}
?>
输出:0 1 0 2 0 3 0 4 0 5
答案 0 :(得分:2)
<?php
$i = 0;
$func1 = function() use ($i) { echo "$i"; };
$func2 = function() use (&$i) { echo "$i"; };
for ( $i=1; $i<=5; $i++ ) {
$func1();
$func2();
}
?>
use ($i)
的第一个定义在定义函数时从父作用域获取值(因此,在$func1
中,$i
始终为{ {1}})。但是,第二个函数在使用0
时,会通过引用获取use(&$i)
值,因此它将打印$i
的实际值,而不仅仅是在定义时
这些功能定义称为匿名函数。
有关official PHP documentation中的匿名函数的更多信息。
======
因此,对于$i
,$func1
始终是$i
。
对于0
,它将从$func2
到1
(由于您的5
循环)。
迭代1: func1:$ i = 0; func2:$ i = 1
迭代2: func1:$ i = 0; func2:$ i = 2
...
迭代N: func1:$ i = 0; func2:$ i = N