PlusMagi's Blog By Pitt Phunsanit PHP PHP: Short Open Tags

PHP: Short Open Tags

การใช้ PHP Short Open Tags ( การเขียน <? แทน <?php ) อาจดูเหมือนช่วยให้โค้ดสั้นลงและเขียนง่ายขึ้น แต่ในโลกของการพัฒนาซอฟต์แวร์ระดับมืออาชีพ สิ่งนี้ถือเป็นแนวทางปฏิบัติที่ควรหลีกเลี่ยงอย่างยิ่ง นี่คือเหตุผลและอันตรายที่คุณควรทราบครับ


ปัญหาด้านการย้ายระบบ ( Portability )

นี่คือปัญหาที่ใหญ่ที่สุด เพราะ Short Tags ถูกควบคุมโดยการตั้งค่าในไฟล์ php.ini ผ่านคำสั่ง short_open_tag

  • ความไม่แน่นอน: หากคุณย้าย Code ไปรันบน Server เครื่องอื่นที่ปิดการใช้งานส่วนนี้ไว้ ( ซึ่งมักจะเป็นค่า Default ในปัจจุบัน ) Code ของคุณจะไม่ถูกประมวลผล
  • ผลลัพธ์ที่อันตราย: แทนที่ PHP จะรันคำสั่ง มันจะปล่อยให้ Code ชุดนั้นหลุดออกไปแสดงผลเป็น Plain Text บนหน้าเว็บ ซึ่งอาจทำให้ข้อมูลสำคัญหรือ Logic ของระบบรั่วไหลสู่สาธารณะได้

ความสับสนกับ XML Declaration

หากเว็บไซต์ของคุณมีการใช้งาน XML หรือไฟล์จำพวก SVG โครงสร้างไฟล์เหล่านี้จะเริ่มต้นด้วย: <?xml version="1.0" encoding="UTF-8" ?>

ถ้าคุณเปิดการใช้งาน Short Open Tags ใน PHP ตัว Parser จะสับสนว่า <?xml คือจุดเริ่มต้นของ PHP Code หรือไม่ ซึ่งจะส่งผลให้เกิด Parse Error ทันทีจนหน้าเว็บล่ม


ขัดต่อมาตรฐานสากล ( Coding Standards )

มาตรฐาน PSR-1 ( Basic Coding Standard ) ซึ่งเป็นที่ยอมรับทั่วโลกโดยกลุ่ม PHP-FIG ระบุไว้อย่างชัดเจนว่า

PHP code MUST use the long <?php ?> tags or the short-echo <?= ?> tags; it MUST NOT use the other tag variations.


ความสับสนในอนาคตของภาษา

ในอดีตเคยมีแท็กรูปแบบอื่นอย่าง <% ... %> (ASP style) หรือ <script language="php"> ซึ่งถูกถอดออกจาก PHP 7 ไปแล้ว แม้ว่าในปัจจุบัน <? ยังคงอยู่ (ถ้าเปิด Config) แต่ไม่มีใครรับประกันได้ว่ามันจะไม่ถูกถอดออกอย่างถาวรในเวอร์ชันอนาคตเพื่อความสะอาดของตัวภาษา


ข้อควรจำ: ข้อยกเว้นสำหรับ Short Echo Tag

โปรดจำไว้ว่า <?= (Short Echo Tag) นั้นแตกต่างจาก <? (Short Open Tag) ทั่วไป

  • ตั้งแต่ PHP 5.4 เป็นต้นมา แท็ก <?= ... ?> จะถูกเปิดใช้งาน ถาวร เสมอ ไม่ว่าจะตั้งค่าใน php.ini อย่างไร
  • ดังนั้น การใช้ <?= $variable; ?> เพื่อแสดงผลค่าตัวแปรนั้น ปลอดภัยและยอมรับได้ ตามมาตรฐาน PSR

คำแนะนำในการแก้ไข

หากคุณมีโปรเจกต์เก่าที่ใช้ Short Tags อยู่จำนวนมาก แนะนำให้ใช้เครื่องมือประเภท Search and Replace หรือ Tool อย่าง PHP Coding Standards Fixer ( PHP CS Fixer ) เพื่อเปลี่ยนจาก <? เป็น <?php ให้หมดทั้งโปรเจกต์ เพื่อความปลอดภัยและความยั่งยืนของ Code ครับ


อ่านเพิ่มเติม

Leave a Reply