2010-10-12 19 views
11

तो मेरे पास एक फ़ंक्शन है जैसे:PHP इको आउटपुट कैप्चर करना संभव है?

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>'; 
    } 
} 

यह फ़ंक्शन कुछ आइटमों पर लूप करता है और एक अनॉर्डर्ड सूची प्रस्तुत करता है। मैं क्या सोच रहा हूं कि यदि मेरी इच्छा है तो इको आउटपुट कैप्चर करना संभव है।

मैं इस फ़ंक्शन का उपयोग कुछ ऐसा करने के लिए करने के लिए करता हूं जैसे:

Render::UnorderedList(Class::getItems(), Class::getFields(), true); 

और यह मेरे पृष्ठ पर एक अनियंत्रित सूची डंप करेगा। मुझे पता है कि मैं सिर्फ एक चर में इको बदल सकता हूं और चर को वापस कर सकता हूं लेकिन अगर मैं उस फ़ंक्शन को संशोधित किए बिना इको आउटपुट कैप्चर करना संभव था, तो मैं केवल उत्सुक था, केवल कुछ तरीकों से कॉल को संशोधित करना?

धन्यवाद!

उत्तर

40

हां, output buffering का उपयोग कर।

<?php 
ob_start(); // Start output buffering 

Render::UnorderedList(Class::getItems(), Class::getFields(), true); 

$list = ob_get_contents(); // Store buffer in variable 

ob_end_clean(); // End buffering and clean up 

echo $list; // will contain the contents 
?> 
+0

+1 वही उत्तर, 1 मिनट पहले। – Gazler

+0

संक्षिप्त और अच्छे उत्तर के लिए धन्यवाद बहुत दिलचस्प है। :-) – Chris

+0

@ पेक्का: मेरा एक प्रोजेक्ट के लिए विशिष्ट एक छोटे एमवीसी फ्रेमवर्क के लिए डिजाइन के मामले में यह जाने का एक अच्छा तरीका होगा? मेरे पास एक ऐसा एप्लिकेशन है जो अपने डेटा के लिए साबुन वेब सेवा पर निर्भर करता है और यह एक रेंडर क्लास है जो ऑब्जेक्ट्स को तर्क से स्वीकार करता है और एचटीएमएल को उन पर आधारित करता है जैसा आपने देखा है, इस अनॉर्डर्डलिस्ट फ़ंक्शन के साथ। बस इस पर उत्सुकता है कि आपके विचार क्या हैं। उस समाधान के आधार पर मैं index.php जैसे पृष्ठों को देख सकता हूं जिसमें बहुत से ob_start, ob_end_cleans फ़ंक्शन कॉल के बीच हैं। शायद मैंने कुछ नया सीखा लेकिन फिर भी प्रतिपादन कार्यों की स्थिर पुस्तकालय को फिर से काम करने की जरूरत है? – Chris

0

पिछले जवाब लेकिन मेरे प्रयोजनों के लिए एक छोटे से अधिक संक्षिप्त करने के लिए बहुत समान:

<?php 
ob_start(); // Start output buffering 

Render::UnorderedList(Class::getItems(), Class::getFields(), true); 

$list = ob_get_clean(); // Store buffer AND cleans it 

echo $list; // will contain the contents 
?> 

मैं भी इतनी के रूप में के साथ अपने परीक्षण लॉग को अस्त-व्यस्त करने के लिए नहीं इस पीएचपी इकाई परीक्षण के लिए कितनी उपयोगी उल्लेख करना चाहते हैं जब तक परीक्षण विफल नहीं हो जाता तब तक आप जो परीक्षण कर रहे हैं उसका आउटपुट। यहां से एक और स्टैकफ्लो उत्तर दिया गया है क्योंकि मुझे यह जानकारी पहली बार मेरी Google खोज पर मिली जब मैं देख रहा था कि इको आउटपुट के साथ आइटम्स का परीक्षण कैसे करें: How to use output buffering inside PHPUnit test?

संबंधित मुद्दे