這個習慣源自 Drupal 等知名專案的編碼規範。乍看之下似乎「不完整」,但實際上能避免許多難以除錯的問題。
當 PHP 檔案結尾的 ?> 後面不小心留下不可見字元(空白、換行、BOM 標記)時,這些字元會被當作輸出發送給瀏覽器,導致後續的 header()、setcookie()、session_start() 等函數失效,拋出經典錯誤:
Warning: Cannot modify header information - headers already sent by...
省略結束標籤後,PHP 解析器會自動在檔案結束處結束解析,完全避免此類問題。
PHP 官方文件明確建議:
「PHP 結束標籤?>在 PHP 中是可選的。但如果使用結束標籤,任何由開發者、用戶或 FTP 應用程式插入在結束標籤後的空白字元,都可能導致多餘輸出、PHP 錯誤、後續輸出無法顯示、空白頁。因此,所有 PHP 檔案應省略結束標籤,並插入註解標明檔案結束位置及相對路徑。」
Zend Framework 編碼規範同樣要求:PHP File Formatting
<?php
echo "Here's my code!";
?>
<?php
echo "Here's my code!";
/* End of file myfile.php */
/* Location: ./system/modules/mymodule/myfile.php */
缺點:在 Dreamweaver 等視覺化編輯器的設計檢視模式下可能顯示混亂。
解決:現代開發多使用 VS Code、PhpStorm 等 IDE,已完美支援無結束標籤的 PHP 檔案編輯。
?>