2017-05-29 128 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