我不明白这个PHP代码的输出?

时间:2017-05-29 17:56:15

标签: 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

1 个答案:

答案 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,它将从$func21(由于您的5循环)。

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

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

...

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