Ceci est pour clarifier davantage Réponse de JD Isaaks ...
Le problème que l'on rencontre souvent est que l'on utilise php pour produire du html à partir de plusieurs sources php différentes, et ces sources sont souvent, pour une raison quelconque, produites de différentes manières.
Parfois, vous disposez d'un contenu html littéral que vous souhaitez transmettre directement au navigateur. Dans d'autres cas, le contenu est créé de manière dynamique (côté serveur).
Le contenu dynamique sera toujours ( ?) une chaîne. Maintenant, vous devez combiner ce html dynamique stringifié avec tout html littéral, direct-to-display ... dans une structure de nœuds html significative.
Cela oblige généralement le développeur à envelopper tout ce contenu d'affichage direct dans une chaîne de caractères (comme JD Isaak en parlait) afin qu'il puisse être correctement livré/inséré en conjonction avec le html dynamique... même si vous ne voulez pas vraiment qu'il soit enveloppé.
Mais en utilisant les méthodes ob_##, vous pouvez éviter ce désordre dans les chaînes de caractères. Le contenu littéral est, à la place, sorti dans le tampon. Puis, en une seule étape, le contenu entier du tampon (tout le html littéral) est concaténé dans votre chaîne html dynamique.
(Mon exemple montre du html littéral sorti dans le tampon, qui est ensuite ajouté à une chaîne html ... regardez aussi l'exemple de JD Isaaks pour voir le string-wrapping-of-html).
<?php // parent.php
//---------------------------------
$lvs_html = "" ;
$lvs_html .= "<div>html</div>" ;
$lvs_html .= gf_component_assembler__without_ob( ) ;
$lvs_html .= "<div>more html</div>" ;
$lvs_html .= "----<br/>" ;
$lvs_html .= "<div>html</div>" ;
$lvs_html .= gf_component_assembler__with_ob( ) ;
$lvs_html .= "<div>more html</div>" ;
echo $lvs_html ;
// 02 - component contents
// html
// 01 - component header
// 03 - component footer
// more html
// ----
// html
// 01 - component header
// 02 - component contents
// 03 - component footer
// more html
//---------------------------------
function gf_component_assembler__without_ob( )
{
$lvs_html = "<div>01 - component header</div>" ; // <table ><tr>" ;
include( "component_contents.php" ) ;
$lvs_html .= "<div>03 - component footer</div>" ; // </tr></table>" ;
return $lvs_html ;
} ;
//---------------------------------
function gf_component_assembler__with_ob( )
{
$lvs_html = "<div>01 - component header</div>" ; // <table ><tr>" ;
ob_start();
include( "component_contents.php" ) ;
$lvs_html .= ob_get_clean();
$lvs_html .= "<div>03 - component footer</div>" ; // </tr></table>" ;
return $lvs_html ;
} ;
//---------------------------------
?>
<!-- component_contents.php -->
<div>
02 - component contents
</div>