在 PHP 開發中,include()、require()、include_once()、require_once() 這四個函式都用於引入外部檔案,但它們在錯誤處理與重複引入機制上有關鍵不同。掌握這些差異能幫助你寫出更穩健的程式碼。
這是兩組函式最大的分水嶺:
範例說明:
<?php
$a = 5;
// 假設 test.php 內容為 $a += 3;
// include('./test.php'); // 正常執行,$a 變為 8
// require('./test.php'); // 正常執行,$a 變為 8
// 引入不存在的 test1.php
// include('./test1.php'); // 輸出 Warning,接著輸出 5(程式繼續跑)
// require('./test1.php'); // 輸出 Fatal Error,程式中止,不會輸出 5
// echo $a;
?>
include_once() 和 require_once() 會檢查目標檔案是否已被引入過,若是則跳過重複引入。這對防止函式重複定義、類別重複宣告錯誤至關重要。
<?php
include_once('./test.php');
include_once('./test.php');
include_once('./test.php');
include_once('./test.php');
echo $a; // 輸出 8,test.php 只被執行一次
// 若改用 include() 或 require() 呼叫四次,$a 會遞增四次(5→8→11→14→17)
?>
| 場景 | 推薦函式 | 理由 |
|---|---|---|
| 核心設定檔、關鍵類別庫 | require_once | 缺失即嚴重錯誤,且防重複 |
| 可選模組、樣板片段 | include_once | 缺失不致命,防重複 |
| 確定只引入一次的邏輯 | require / include | 略微效能較好(無檢查開銷) |
實務上,現代框架(如 Laravel、Symfony)皆透過 Composer 自動載入機制管理依賴,直接使用這四個函式的機會較少,但理解其底層行為對除錯舊專案或撰寫獨立腳本仍有幫助。