พวกท่านเคยเจอสถานการณ์อย่างนี้ไหม สถานการณ์ที่ต้องเขียน PHP พ่น HTML ออกไปยาวๆเยอะๆ แล้วพอใช้คำสั่ง echo ทำให้โค้ด HTML มันไม่ไฮไลท์อย่างที่มันควรจะเป็น ทำให้ต้องจ้องโค้ดเป็นพิเศษ
<?php
echo '
<h2>HTML Table</h2>
<table>
<tr>
<th>Company</th>
<th>Contact</th>
<th>Country</th>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
<tr>
<td>Centro comercial Moctezuma</td>
<td>Francisco Chang</td>
<td>Mexico</td>
</tr>
<tr>
<td>Ernst Handel</td>
<td>Roland Mendel</td>
<td>Austria</td>
</tr>
<tr>
<td>Island Trading</td>
<td>Helen Bennett</td>
<td>UK</td>
</tr>
<tr>
<td>Laughing Bacchus Winecellars</td>
<td>Yoshi Tannamuri</td>
<td>Canada</td>
</tr>
<tr>
<td>Magazzini Alimentari Riuniti</td>
<td>Giovanni Rovelli</td>
<td>Italy</td>
</tr>
</table>
';
แม้จะเอา heredoc มาใช้ก็ยังดูยากแล้วก็ไฮไลท์โค้ดไม่ดี
<?php
echo <<<HEREDOC
<h2>HTML Table</h2>
<table>
<tr>
<th>Company</th>
<th>Contact</th>
<th>Country</th>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
<tr>
<td>Centro comercial Moctezuma</td>
<td>Francisco Chang</td>
<td>Mexico</td>
</tr>
<tr>
<td>Ernst Handel</td>
<td>Roland Mendel</td>
<td>Austria</td>
</tr>
<tr>
<td>Island Trading</td>
<td>Helen Bennett</td>
<td>UK</td>
</tr>
<tr>
<td>Laughing Bacchus Winecellars</td>
<td>Yoshi Tannamuri</td>
<td>Canada</td>
</tr>
<tr>
<td>Magazzini Alimentari Riuniti</td>
<td>Giovanni Rovelli</td>
<td>Italy</td>
</tr>
</table>
HEREDOC;
แต่ถ้าใช้ ob_start, ob_get_clean ไฮไลท์โค้ดจะทำได้ดีกว่า
<?php
ob_start();
?>
<h2>HTML Table</h2>
<table>
<tr>
<th>Company</th>
<th>Contact</th>
<th>Country</th>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
<tr>
<td>Centro comercial Moctezuma</td>
<td>Francisco Chang</td>
<td>Mexico</td>
</tr>
<tr>
<td>Ernst Handel</td>
<td>Roland Mendel</td>
<td>Austria</td>
</tr>
<tr>
<td>Island Trading</td>
<td>Helen Bennett</td>
<td>UK</td>
</tr>
<tr>
<td>Laughing Bacchus Winecellars</td>
<td>Yoshi Tannamuri</td>
<td>Canada</td>
</tr>
<tr>
<td>Magazzini Alimentari Riuniti</td>
<td>Giovanni Rovelli</td>
<td>Italy</td>
</tr>
</table>
<?php
echo ob_get_clean();
จะเห็นว่าโค้ดด้านบนนี่ PHP แยกอยู่ของ PHP HTML แยกอยู่ของ HTML ทำให้ดูโค้ดได้ง่ายเวลามันอยู่ใน editor
คำสั่ง ob_start จะเป็นคำสั่งที่บอก PHP ว่าต่อจากนี้ไปอะไรที่ echo ออกมาให้เอาไปเก็บไว้ใน cache ก่อนนะ ส่วนคำสั่ง ob_get_clean เป็นคำสั่งบอกว่า ให้เอาค่าที่อยู่ใน cache ออกมาแล้วเคลียร์แคชทิ้งเลย
ถ้าเขียนเป็นฟังก์ชั่น หน้าตาก็จะออกมาประมาณนี้
<?php
function generate_table()
{
ob_start();
?>
<h2>HTML Table</h2>
<table>
<tr>
<th>Company</th>
<th>Contact</th>
<th>Country</th>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
<tr>
<td>Centro comercial Moctezuma</td>
<td>Francisco Chang</td>
<td>Mexico</td>
</tr>
<tr>
<td>Ernst Handel</td>
<td>Roland Mendel</td>
<td>Austria</td>
</tr>
<tr>
<td>Island Trading</td>
<td>Helen Bennett</td>
<td>UK</td>
</tr>
<tr>
<td>Laughing Bacchus Winecellars</td>
<td>Yoshi Tannamuri</td>
<td>Canada</td>
</tr>
<tr>
<td>Magazzini Alimentari Riuniti</td>
<td>Giovanni Rovelli</td>
<td>Italy</td>
</tr>
</table>
<?php
return ob_get_clean();
}
echo generate_table();
Leave a Reply