คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 2
เพราะว่า EDITOR บางตัว เวลาคุณเซฟไฟล์มันจะขึ้นบรรทัดใหม่ให้ หรือบางทีคุณอาจจะเผลอเว้นวรรคหรือขึ้นบรรทัดใหม่หลังปิดแท็ก PHP
เช่น เป็นแบบนี้
<?php
.....
?php>ช่องว่าง/ขึ้นบรรทัดใหม่)
ซึ่งไอ้ช่องว่าง/บรรทัดใหม่ตรงนี้มันจะไปโผล่ใน output ด้วย
ซึ่งจะเกิดข้อเสียดังนี้
1. output เพี้ยน (เพราะมีช่องว่างเพิ่มขึ้นมา) ใน HTML อาจไม่มีปัญหาเท่าไหร่ แต่ถ้าคุณเอา PHP เรนเดอร์ไฟล์ไบนารี เช่น Excel หรือ PDF.
ช่องว่างหนึ่งช่องก็จะทำให้ไฟล์ Excel/PDF คุณเสียแล้ว
2. คุณไม่สามารถ set HTTP HEADER หลังจากมี Output BODY แล้ว ดังนั้นช่องว่างที่ว่าจะทำให้ HEADER ที่คุณตั้งใจจะเซ็ทไม่ทำงาน
เช่น
<?php
require('badfile.php'); // ไฟล์นี้มีช่องว่างหลัง tag
header('Location: http://www.example.com/'); // บรรทัดจะ error, เพราะตั้ง Header หลังมี body output
3. เออเร่อแบบนี้หายากมาก เพราะเป็นตัวอักษรที่มองไม่เห็น
ดังนั้น เนื่องจาก PHP จะปิดแท็ก ?php> ให้เองเมื่อจบแต่ละไฟล์อยู่แล้ว จึงไม่ควรใส่แท็กปิดเอง
เช่น เป็นแบบนี้
<?php
.....
?php>ช่องว่าง/ขึ้นบรรทัดใหม่)
ซึ่งไอ้ช่องว่าง/บรรทัดใหม่ตรงนี้มันจะไปโผล่ใน output ด้วย
ซึ่งจะเกิดข้อเสียดังนี้
1. output เพี้ยน (เพราะมีช่องว่างเพิ่มขึ้นมา) ใน HTML อาจไม่มีปัญหาเท่าไหร่ แต่ถ้าคุณเอา PHP เรนเดอร์ไฟล์ไบนารี เช่น Excel หรือ PDF.
ช่องว่างหนึ่งช่องก็จะทำให้ไฟล์ Excel/PDF คุณเสียแล้ว
2. คุณไม่สามารถ set HTTP HEADER หลังจากมี Output BODY แล้ว ดังนั้นช่องว่างที่ว่าจะทำให้ HEADER ที่คุณตั้งใจจะเซ็ทไม่ทำงาน
เช่น
<?php
require('badfile.php'); // ไฟล์นี้มีช่องว่างหลัง tag
header('Location: http://www.example.com/'); // บรรทัดจะ error, เพราะตั้ง Header หลังมี body output
3. เออเร่อแบบนี้หายากมาก เพราะเป็นตัวอักษรที่มองไม่เห็น
ดังนั้น เนื่องจาก PHP จะปิดแท็ก ?php> ให้เองเมื่อจบแต่ละไฟล์อยู่แล้ว จึงไม่ควรใส่แท็กปิดเอง
แสดงความคิดเห็น
ทำไม PHP ถึงมีการแนะนำไม่ปิด tag? ท้ายไฟล์
แต่แบบว่าอ่านแล้วก็ไม่ค่อยเข้าใจครับ ว่าทำไมถึง error และใช้ในกรณีไหนบ้าง
ใครมีประสบการณ์ตรงนี้บ้างครับ ช่วยอธิบายเป็นวิทยาทานด้วยครับ
ต้นฉบับที่ค้นเจอปัจจุบัน
http://stackoverflow.com/questions/4410704/why-would-one-omit-the-close-tag
http://www.sitepoint.com/should-you-close-your-php-code-tags/