2013-02-27 35 views
1

我不知道下面的代碼會發生什麼:PHP是否爲匿名函數創建輸出緩衝區?

<?php 
function CountUp($count2, $count1) 
{ 
    $count1(); // Say one 
    $count2(); // Say two 
} 

CountUp(function() { 
?> 
    Two 
<?php 
}, function() { 
?> 
    One 
<? 
}); 

顯然PHP創建匿名函數的輸出緩衝器,當我們打電話給他們刷新該緩衝區。

現在的問題是:是否預計PHP的行爲?我想在我的模板引擎中使用這個功能,所以它不能是黑客行爲,並且具有不可預知的行爲。

+0

在PHP中使用匿名函數,你所做的事情總是會令人討厭。順便說一句:這是預期的行爲,因爲一個lambda函數創建一個新的Lambda對象實例... – 2013-02-27 17:24:50

+0

我不認爲正在創建一個緩衝區,它只是不評估PHP標籤之外的文本,直到匿名函數被稱爲 – 2013-02-27 17:26:07

+1

'?> ... <?php'相當於'echo「...」;' – arnaud576875 2013-02-27 17:32:28

回答

1
<?php 
function x() { 
    echo 'x'; 
} 
x(); 
?> 

在功能上等同

<?php function y() { ?> 
y 
<? } 
y(); 

?> 

兩者都將它們的輸出和x字符y僅當函數被調用。

+0

他想在模板引擎中使用它。所以我真的不認爲這是「功能相同」。 – 2013-02-27 17:32:34