| 函數 | 重複包含 | 找不到檔案 | 適用場景 |
|---|---|---|---|
| include | 允許多次 | Warning,繼續執行 | 模板片段、可選配置 |
| include_once | 僅包含一次 | Warning,繼續執行 | 函數庫、類別定義 |
| require | 允許多次 | Fatal Error,腳本終止 | 核心配置、必須依賴檔案 |
| require_once | 僅包含一次 | Fatal Error,腳本終止 | 核心類別、單例載入 |
<?php
include 'demo1.php';
include 'demo1.php';
include 'demo1.php';
?>
輸出:demo1.php 內容連續輸出三次。
<?php
include_once 'demo1.php';
include_once 'demo1.php';
include_once 'demo1.php';
?>
輸出:demo1.php 內容僅輸出一次。
<?php
require 'demo1.php';
require 'demo1.php';
require 'demo1.php';
?>
輸出:同 include,輸出三次;但若 demo1.php 不存在,直接 Fatal error 停止。
<?php
require_once 'demo1.php';
require_once 'demo1.php';
require_once 'demo1.php';
?>
輸出:僅輸出一次;缺檔同樣拋出致命錯誤。
<?php
// include 版本
include 'not_exist.php';
echo 'this is demo13.php'; // 仍會執行,前面只有 Warning
// require 版本
require 'not_exist.php';
echo 'this is demo14.php'; // 永遠不會執行,Fatal error 直接終止
E_WARNING,腳本繼續,適合非關鍵檔案(如廣告區塊、側邊欄)。E_COMPILE_ERROR,腳本立即停止,適合核心依賴(如資料庫設定、自動載入器)。_once 系列需維護「已包含檔案」查找表,微幅增加記憶體與 CPU 開銷;大型專案建議配合 Composer PSR-4 自動載入,完全避免手動 include/require。if ($cond) include 'a.php';)不能使用 _once 版本,否則條件判斷失效(PHP 編譯期已登記)。require_once 'vendor/autoload.php' 只出現在入口檔,其餘皆靠命名空間解析。require_once,共用函數庫用 include_once,視圖片段用 include。error_reporting(E_ALL),生產環境關閉顯示但記錄日誌,避免 Warning 洩露路徑資訊。理解四者差異,能讓你在遺留專案重構、效能優化、錯誤處理時做出正確選擇。