| 特性 | include | require |
|---|---|---|
| 檔案不存在 | 發出 Warning (E_WARNING),腳本繼續執行 | 發出 Fatal Error (E_COMPILE_ERROR),腳本立即停止 |
| 回傳值處理 | 支援 return 回傳值,可像函數一樣接收 | 相同 |
| 條件式載入 | 需包在大括號 { include $file; } | 相同 |
| 適用場景 | 非核心、可選模組、模板片段 | 核心設定、必要類別、關鍵函數庫 |
被載入檔案會繼承 include/require 所在行的變數作用域:
<?php
$color = 'green';
$fruit = 'apple';
include 'vars.php'; // vars.php 內可直接使用 $color, $fruit
?>
若在函數內 include,被載入程式碼視同定義在該函數內部,遵循函數作用域:
function foo() {
global $color;
include 'vars.php'; // $color 為全域,$fruit 為區域變數
echo "A $color $fruit";
}
foo(); // 輸出 "A green apple"
echo $fruit; // Notice: Undefined variable
/ 或 C:\ 開頭) 或相對路徑 (以 ./、../ 開頭),直接依路徑尋找。include_path 設定的目錄順序搜尋。include_path 找不到,最後嘗試當前執行腳本目錄 (__DIR__) 與當前工作目錄 (getcwd())。建議:生產環境統一使用 __DIR__ . '/path/to/file.php' 絕對路徑,避免路徑解析歧義與效能損耗。
allow_url_fopen=On)
// 僅當遠端伺服器將 .php 解析為 PHP 程式碼時,變數才會被解析
include 'https://example.com/file.php?foo=1&bar=2'; // 遠端執行,本地拿到輸出結果
// 此時並非繼承本地變數作用域,而是 HTTP 請求回應
注意:Windows 版 PHP 早期版本不支援 URL 載入,現代版本已支援但需開啟 allow_url_include (PHP 5.2+ 預設關閉)。
// config.php
<?php
return [
'db' => ['host' => 'localhost', 'name' => 'test'],
'debug' => true
];
?>
// index.php
<?php
$config = include 'config.php'; // 接收陣列
var_dump($config['db']['host']); // 'localhost'
?>
若被載入檔案無 return,include 成功回傳 1,失敗回傳 false。
// 錯誤:無大括號,語法解析錯誤
if ($condition)
include 'a.php';
else
include 'b.php';
// 正確:必須用大括號包裹
if ($condition) {
include 'a.php';
} else {
include 'b.php';
}
require_once/include_once 會檢查檔案是否已載入,有微小額外開銷。明確知道只需載入一次時可用,否則優先用 require/include。_once 開銷。spl_autoload_register) 取代大量 require_once 是現代框架標準做法。require (或 require_once),失敗即停止,避免後續邏輯在不完整環境下執行產生難以除錯的錯誤。include,允許優雅降級 (如模板片段缺失顯示預設內容)。require __DIR__ . '/../config/bootstrap.php';require/include。