การใช้ 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 ครับ
อ่านเพิ่มเติม
