2011-03-01 53 views
1

我有两个功能:输出缓冲器显示“1”

core_function($atts) { 
     (attributes) 
     (core functions, a few loops, echoes, a lot of direct input) 
    } 

这就是我如何使用输出缓冲显示我的功能(是的,我一直用它!)。

display_function($atts) { 
      (attributes) 

       $output = ob_start(); 
       $output .= core_function($atts); 
       $output .= ob_get_clean(); 

      return $output; 
} 

一切都很好,但返回$输出不仅显示核心功能,而且还显示它们之前的“1”。我不知道这个“1”来自哪里。当我删除ob_start();和ob_get_clean();它消失了。所以我相信输出缓冲区以某种方式添加这个数字。但是,如何,为什么?这是一个原始的 “1”,而不是在一个段落等

Normaly display_function($的ATT)所示,例如:

<div>This is Core Function!</div> 

具有输出缓冲它显示:

1    <div>This is Core Function!</div> 

为什么它发生了吗?如果它与我的功能有关,我会再说一遍 - 在所有内容之前,1正好显示。

回答

9

这不是输出缓冲的工作方式。 ob_start在完成时返回TRUE或FALSE,因此您要连接一堆不应连接的事物。 (您对core_function的调用也是如此)。

display_function($atts) { 
    (attributes) 

    ob_start(); 
    core_function($atts); 
    return ob_get_clean(); 
} 

应该工作。它打开输出缓冲,这将保存所有的输出(回声和打印等)。调用ob_get_clean将返回缓冲输出的内容。

+0

惊人而快速的答案,我所需要的一切,谢谢,谢谢,谢谢!因为只接受你的答案是不够的。 – anonymous 2011-03-01 23:45:28

+0

@anonymous欢迎你,我希望它有帮助。 – GWW 2011-03-01 23:45:50