2013-02-27 51 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