Để trả lời trực tiếp câu hỏi của bạn: Không bao giờ lặp lại văn bản tĩnh hoặc HTML. Để nó bên ngoài PHP của bạn.
<?php echo "<p>Hello World</p>"; // Alway wrong. ?>
<p>Hello World</p> <!-- Does the same thing, faster, and is more readable. -->
Thoát khỏi PHP là một sự lãng phí nếu tất cả những gì bạn sẽ làm là chuyển qua văn bản tĩnh hoặc html tĩnh. Tất cả các mã bên trong <?php ?>
được gửi đến PHP để được giải thích. Điều này có nghĩa là trang web của bạn chậm hơn và bạn đang lãng phí điện nếu bạn chuyển một lượng lớn văn bản tĩnh sang PHP mà không có lý do. (Đôi khi có một lý do.)
Thực hành tốt nhất là để logic và grunt của bạn hoạt động trong các tệp mà không cần bất kỳ HTML nào, chỉ có PHP.
Cách tôi muốn làm là với một khung MVC. Tôi có PHP thuần túy trong các mô hình và bộ điều khiển và hỗn hợp HTML và PHP trong các khung nhìn. Bạn không cần một khung MVC; bạn chỉ có thể dán hỗn hợp HTML của mình vào các tệp mẫu, sau đó bạn đưa vào các tệp PHP thuần túy của mình.
Khi bạn có các biến của mình (không bao gồm HTML trong chúng) được tạo trong các tệp PHP thuần túy, bạn có thể chuyển chúng sang tệp bằng HTML của mình. Ở đó, và chỉ ở đó, việc kết hợp HTML và PHP là tốt. Nhưng, và đây là một điều quan trọng nhưng, khi làm việc với các tệp có HTML, hãy giữ PHP ở mức tối thiểu.
May mắn thay, PHP đi kèm với các công cụ thân thiện để giúp PHP dễ đọc hơn khi trộn với html.
Cú pháp thay thế
Cách thực hành tốt nhất là sử dụng cú pháp PHP thông thường khi viết PHP thuần túy, nhưng cú pháp thay thế, khi trộn PHP và HTML.
Trong các tệp PHP thông thường mà không có bất kỳ HTML nào:
if ($something) {
do_something(); // do_something() shouldn't echo or print.
}
Điều này là đẹp cho PHP thuần túy, nhưng không lý tưởng khi thoát khỏi HTML. Đặc biệt, các dấu ngoặc nhọn thường khó hiểu khi chúng xuất hiện trong đống HTML lớn.
Dường như, dựa trên câu hỏi của bạn mà bạn đã viết, trong một tệp trộn HTML và PHP, điều này:
<?php
if ($something) {
echo '<p>Hello World.</p>';
}
?>
Vì các lý do được mô tả ở trên, chúng tôi muốn HTML không được gửi đến PHP. Chúng tôi làm như vậy:
<?php if ($something) { ?>
<p>Hello World.</p>
<?php } ?>
Chúng tôi đã lấy HTML của mình ra khỏi các thẻ PHP, đây là một cải tiến. Nhưng chúng ta có thể đi xa hơn.
Chú ý làm thế nào không chính xác các nẹp đóng cửa là? Chúng tôi không biết nếu nó đang đóng một vòng lặp hoặc một câu lệnh if. Điều này có vẻ tầm thường trong ví dụ trên, nhưng thường có hàng tá dòng HTML bên trong if / endif bên trong một vòng lặp / endloop.
Cách thực hành tốt nhất là trong một tệp trộn PHP và HTML, bạn sử dụng cú pháp thay thế, bỏ qua dấu ngoặc mở và đóng ( { }
):
<?php if ($something): ?>
<p>Hello world.</p>
<?php endif; ?>
Ngoài ngữ nghĩa của cú pháp mới ( :
và endif;
thay vì {
và }
), bạn nên chú ý hai điều:
- Một lần nữa, HTML và văn bản, trong khi được kiểm soát bởi PHP, nằm ngoài các
<?php ?>
thẻ, vì vậy nó không được diễn giải. Đối với các lý do được mô tả ở trên, điều này là tốt.
- Điều này có nhiều thông tin hơn so với việc đây là tất cả php bao gồm cả niềng răng đóng ngẫu nhiên (
<?php } ?>
) đóng những thứ khó tìm thấy ở nơi chúng mở (vì chúng được trộn lẫn với một buch của HTML trông lộn xộn). Một lần nữa, hãy tưởng tượng một tệp HTML lớn với các vòng lặp và các câu lệnh if. Chỉ định những gì bạn đang đóng có thể làm rõ rất nhiều.
Cú pháp thân thiện mẫu tương tự cũng có thể được sử dụng cho các vòng lặp:
<?php foreach ($things as $thing): ?>
<li><?php echo $thing; ?></li>
<?php endforeach; ?>
Thẻ ngắn
Một công cụ tuyệt vời khác do PHP cung cấp, một lần nữa, bạn chỉ muốn sử dụng khi trộn PHP và HTML với nhau, là các thẻ ngắn. Bạn có thể phải bật các thẻ ngắn trong tệp php.ini. Sau khi bật, các thẻ ngắn làm cho mọi thứ thậm chí còn dễ đọc hơn.
Không có thẻ ngắn, bạn phải viết <?php echo $something; ?>
nhưng với thẻ ngắn bạn có thể viết <?=$something?>
và nó sẽ có kết quả chính xác như nhau.
Khi kết hợp các thẻ ngắn và cú pháp PHP thay thế, bạn thực sự có thể viết một số tệp HTML thanh lịch, bao gồm các phần tử PHP. Lấy ví dụ về vòng lặp cuối cùng của chúng tôi (chỉ là phần bên trong vòng lặp), các thẻ ngắn cho phép chúng tôi giảm:
<li><?php echo $thing; ?></li>
đến
<li><?=$thing?></li>
dễ đọc hơn nhiều
Chúng ta có thể đi xa hơn không? Vâng. Sử dụng các hệ thống tạo khuôn mẫu khác nhau, bạn có thể làm những việc như:
<li>{thing}</li>
Đó là tuyệt vời có thể đọc được. Tuy nhiên, các hệ thống khuôn mẫu nằm ngoài phạm vi của câu hỏi ban đầu (dù sao tôi đã để lại một lúc trước).