2009-04-22 16 views
19

मैं गतिशील समारोह नामों का उपयोग कर कार्यों बोल रहा हूँ में गूंज पर कब्जा (कुछ इस तरह)एक चर

$unsafeFunctionName = $_POST['function_name']; 
$safeFunctionName = safe($unsafeFunctionName); // custom safe() function 

तब मैं समारोह के दिए गए मान के आसपास कुछ एक्सएमएल लपेट के लिए इच्छुक हूँ (कुछ इस तरह):

// xml header etc already created 
$result = "<return_value>" . $safeFunctionName() . "</return_value>"; 

समस्या यह है कि कभी-कभी फ़ंक्शन एक मान देता है, लेकिन कभी-कभी, फ़ंक्शन इको एक मान होता है। मैं जो करना चाहता हूं वह उस चर को प्रतिबिंबित करता है, लेकिन, जो कोड मैं लिखता हूं उसे किसी भी तरह से काम करने की आवश्यकता होगी (यानी, यदि फ़ंक्शन कोई मान देता है, या गूंज एक स्ट्रिंग है)।

कोई विचार नहीं ~ कहां से शुरू करना है?

उत्तर

52

मुझे यह कहकर प्रस्तावना दें: उस कस्टम फ़ंक्शन कॉलिंग व्यवसाय से सावधान रहें। मुझे लगता है कि आप जानते हैं कि यह कितना खतरनाक हो सकता है, यही कारण है कि आप इसे किसी भी तरह से साफ कर रहे हैं।

कि विगत

, आप क्या चाहते हैं जाना जाता है output buffering के रूप में:

function hello() { 
    print "Hello World"; 
} 
ob_start(); 
hello(); 
$output = ob_get_clean(); 
print "--" . $output . "--"; 

ऊपर इच्छा उत्पादन --Hello World-- (मैं दिखाने के लिए यह पहली बार में मुद्रित नहीं कर रहा है की जा रही डैश जोड़ा)

+0

बस एक छोटी सी बात, आप ob_get_clean विधि के बारे में पता है? –

+0

या तो ठीक काम करेगा, नहीं? –

+0

सही - धन्यवाद! – OneNerd

8

PHP: ob_get_contents

ob_start(); //Start output buffer 
echo "abc123"; 
$output = ob_get_contents(); //Grab output 
ob_end_clean(); //Discard output buffer 
0

आदेश वें उपयोग करने के लिए ई उत्पादन मूल्य, वर्तमान या वापसी मान यदि नहीं तो, आप बस इस तरह अपने कोड को संशोधित कर सकते हैं:

ob_start(); 
$return_val = $safeFunctionName(); 
$echo_val = ob_get_clean(); 
$result = "<return_value>" . (strlen($echo_val) ? $echo_val : $return_val) . "</return_value>";