2009-02-09 28 views
48

Tôi có một hàm PHP mà tôi đang sử dụng để xuất ra một khối HTML chuẩn. Nó hiện giống như sau:Có cách nào để trả về HTML trong một hàm PHP không? (không xây dựng giá trị trả về dưới dạng chuỗi)

<?php function TestBlockHTML ($replStr) { ?> 
    <html> 
    <body><h1> <?php echo ($replStr) ?> </h1> 
    </html> 
<?php } ?> 

Tôi muốn trả về (chứ không phải là echo) HTML bên trong hàm. Có cách nào để làm điều này mà không xây dựng HTML (ở trên) trong một chuỗi?

Trả lời

71

Bạn có thể sử dụng một heredoc, hỗ trợ suy biến, làm cho nó trông khá gọn gàng:

function TestBlockHTML ($replStr) { 
return <<<HTML 
    <html> 
    <body><h1>{$replStr}</h1> 
    </body> 
    </html> 
HTML; 
} 

Chú ý đến cảnh báo trong hướng dẫn sử dụng mặc dù - dòng đóng không được chứa bất kỳ khoảng trống nào, vì vậy không thể thụt lề.

+2

Ngoài ra, <<< HTML định danh heredoc không được thụt vào, đó là nếu nó không có một cái gì đó như "trở lại" ở phía trước của nó. –

+10

nó có thể được thụt lề nhiều như bạn muốn, nhưng cần phải có một dòng mới ngay sau khi định danh. –

+0

Bạn có thể tránh niềng răng nếu var là phi vào một mảng:

$ replStr

hoặc

{$ array [ 'var]}

WalterV

54

Vâng, đó là: bạn có thể chụp các văn bản echo ed sử dụng ob_start:

<?php function TestBlockHTML ($replStr) { ob_start(); ?> 
    <html> 
    <body><h1> <?php echo ($replStr) ?> </h1> 
    </html> 
<?php 
    return ob_get_clean(); 
} ?> 
+0

Chính xác, cú pháp theo cách này được đánh dấu và chìa khóa từ được tô màu như chúng sẽ là HTML bình thường, không phải là nội dung trong một chuỗi. Chắc chắn một câu trả lời tốt hơn cho bảo trì, mà nên luôn luôn đến đầu tiên –

+0

Tại sao bạn sẽ sử dụng bộ đệm đầu ra khi điều này dường như làm việc tốt? ' \t

\t

Lorem ipsum dolar

' – Joren

+1

@ Joren Bởi vì đó rõ ràng là những gì OP không muốn. –

5

Tạo tệp mẫu và sử dụng công cụ mẫu để đọc/cập nhật tệp. Nó sẽ tăng khả năng bảo trì mã của bạn trong tương lai cũng như hiển thị riêng biệt từ logic.

Một ví dụ sử dụng Smarty:

Template file

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
<head><title>{$title}</title></head> 
<body>{$string}</body> 
</html> 

function TestBlockHTML(){ 
    $smarty = new Smarty(); 
    $smarty->assign('title', 'My Title'); 
    $smarty->assign('string', $replStr); 
    return $smarty->render('template.tpl'); 
} 
14

Đây có thể là một giải pháp sơ sài, và tôi đánh giá cao bất cứ ai chỉ ra liệu đây là một ý tưởng tồi, vì nó không phải là việc sử dụng các chức năng tiêu chuẩn. Tôi đã có một số thành công nhận được HTML ra khỏi một hàm PHP mà không cần xây dựng các giá trị trả về như là một chuỗi những điều sau:

function noStrings() { 
    echo ''?> 
     <div>[Whatever HTML you want]</div> 
    <?php; 
} 

Các chỉ 'gọi là' chức năng:

noStrings(); 

Và nó sẽ đầu ra:

<div>[Whatever HTML you want]</div> 

Sử dụng phương pháp này, bạn cũng có thể xác định biến PHP trong hàm và lặp lại chúng trong HTML.

+0

/mindblown bạn có thể giải thích tại sao điều này hoạt động khi hết thất bại? –

+2

hoạt động tốt mà không có 'echo', chỉ là'?> Html vladkras

2

Một cách khác để làm là là sử dụng file_get_contents() và có một trang mẫu HTML

TRANG MẪU

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
<head><title>$title</title></head> 
<body>$content</body> 
</html> 

PHP Chức năng

function YOURFUNCTIONNAME($url){ 

$html_string = file_get_contents($url); 
return $html_string; 

} 
Các vấn đề liên quan