2017-05-29 39 views
-5

我无法理解这段代码,可以请别人向我解释一下吗?我不明白这个PHP代码中的输出?

<?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

您期望看到的输出是什么? – summea

+0

@summea我不明白如何在这种情况下工作。为什么它引用for循环中定义的变量? –

+0

格式非常好:P –

回答

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将始终为0)。但是,使用use(&$i)时,第二个功能是抓取$i,通过参考,因此它不仅会在定义时打印$i的实际值。

这些函数定义被称为匿名函数

有关official PHP documentation中的匿名函数的更多信息。

=========

因此,对于$func1$i总是0。 对于$func2,它将从15(由于您的for循环)。

迭代1: func1:$ i = 0; func2:$ i = 1

迭代2: func1:$ i = 0; FUNC2:$ I = 2

...

迭代N: func1的:$ I = 0; func2:$ i = N

+0

谢谢亚历杭德罗 –

+0

如果它是正确的,请接受他的回答 – Ola