Possible de capturer PHP echo de sortie?
J'ai donc une fonction telle que:
public static function UnorderedList($items, $field, $view = false){
if(count($items) > 0){
echo '<ul>';
foreach($items as $item){
echo '<li>';
if($view){
echo '<a href="'.$view.'id='.$item->sys_id.'" title="View Item">'.$item->$field.'</a>';
}else{
echo $item->$field;
}
echo '</li>';
}
echo '</ul>';
}else{
echo '<p>No Items...</p>';
}
}
Cette fonction passe en boucle sur certains points et rend une liste non ordonnée. Ce que je me demande c'est si il est possible de capturer l'écho de sortie si je le souhaite.
Je fais un appel pour utiliser cette fonction en faisant quelque chose comme:
Render::UnorderedList(Class::getItems(), Class::getFields(), true);
Et cela va vider une liste non triée sur ma page. Je Sais que je peux juste changer écho à une variable et le retour de la variable, mais j'étais juste curieux de savoir si ses possible de capturer l'écho de sortie sans modifier cette fonction, simplement modifier l'appel à la fonction d'une certaine façon?
Merci!
OriginalL'auteur Chris | 2010-10-12
Vous devez vous connecter pour publier un commentaire.
Oui, à l'aide de le tampon de sortie.
Très intéressant, merci pour la concision et de la bonne réponse. 🙂
En termes de design pour un petit framework MVC spécifiques à un projet de mine serait-ce une bonne solution? J'ai une application qui s'appuie sur un web service soap pour ses données et c'est le Rendu d'une classe qui accepte des objets en argument et rend HTML basé sur eux comme vous l'avez vu avec cette unorderedlist fonction. Juste curieux de savoir ce que sont vos pensées sur cette. Basé sur cette solution, je peux voir les pages comme index.php le fait d'avoir beaucoup de ob_start, ob_end_cleans avec les appels de fonction entre les deux. J'ai peut-être appris quelque chose de nouveau, mais encore besoin de retravailler la statique de la bibliothèque de fonctions de rendu ?
je pourrais peut-être avoir le Rendu de la classe de toutes les fonctions ont ob_start(), ob_get_contents(), ob_end_clean() en eux et ont un champ public pour cette classe qui est annexé le résultat de ob_get_contents? De cette façon, je pourrais construire la page vers le haut à l'aide d'un Rendu classe et à la fin, de faire un simple echo de Rendu::$contentsfield; ?
Mmm, en utilisant le tampon de sortie dans le cadre d'une bibliothèque ne sonne pas comme une bonne pratique pour moi. C'est plus le genre de chose que vous faites lorsque vous , par exemple lorsque vous travaillez avec une bibliothèque externe qui fait écho à des choses. Pourquoi ne pas changer le comportement de la classe des méthodes pour renvoyer les données au lieu de l'écho, et faire de la page elle-même (l'un appelant l'Rendu de la classe) echo les résultats?
OriginalL'auteur Pekka 웃
Très Similaire à la réponse précédente mais un peu plus concis pour mes fins:
Je tiens également à souligner combien c'est utile pour PHP tests unitaires afin de ne pas encombrer votre test de journaux avec la sortie de ce que vous êtes d'essai à moins que le test échoue. Voici un autre stackflow à répondre à d'autres parce que j'ai trouvé cette réponse en premier sur ma recherche google quand je regardais comment les éléments du test avec l'écho de sortie : Comment utiliser le tampon de sortie à l'intérieur de PHPUnit test?
OriginalL'auteur Kevin_Ankiewicz