2009-04-22 33 views
19

tôi kêu gọi các chức năng sử dụng tên hàm động (một cái gì đó như thế này)chụp vang vào một biến

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

Sau đó, tôi đang muốn quấn một số xml xung quanh giá trị trả về của hàm (một cái gì đó như thế này):

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

Vấn đề là, đôi khi hàm trả về giá trị, nhưng đôi khi, hàm này lại có giá trị. Những gì tôi muốn làm là nắm bắt tiếng vọng đó thành một biến, nhưng, mã tôi viết sẽ cần phải làm việc theo một trong hai cách (nghĩa là, nếu hàm trả về một giá trị, hoặc một chuỗi của một chuỗi).

Bạn không chắc chắn nên bắt đầu từ đâu ~ bất kỳ ý tưởng nào?

Trả lời

52

Hãy để tôi nói trước điều này bằng cách nói: Hãy cẩn thận với chức năng tùy chỉnh đó gọi cho doanh nghiệp. Tôi cho rằng bạn biết điều này có thể nguy hiểm như thế nào, đó là lý do tại sao bạn làm sạch nó bằng cách nào đó.

quá khứ đó, những gì bạn muốn được biết đến như output buffering:

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

(tôi đã thêm dấu gạch ngang để hiển thị nó không được in lúc đầu)

Ý chí trên đầu ra --Hello World--

+0

Chỉ là một điểm nhỏ, bạn có biết về phương pháp ob_get_clean không? –

+0

Hoặc sẽ hoạt động tốt ở đây, phải không? –

+0

hoàn hảo - cảm ơn! – 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

để sử dụng thứ e giá trị đầu ra, nếu có hoặc giá trị trả về nếu không, bạn có thể chỉ cần sửa đổi mã của mình như sau:

ob_start(); 
$return_val = $safeFunctionName(); 
$echo_val = ob_get_clean(); 
$result = "<return_value>" . (strlen($echo_val) ? $echo_val : $return_val) . "</return_value>"; 
Các vấn đề liên quan