首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP include() 與 require() 文件引入機制詳解與示例

     編輯:PHP 相關知識

核心區別

特性includerequire
文件不存在發出 **E_WARNING**,腳本**繼續執行**發出 **E_COMPILE_ERROR**,腳本**立即終止**
返回值成功返回 1,失敗返回 false成功返回文件返回值,失敗不返回(終止)
適用場景可選組件、模板、非關鍵配置核心類庫、關鍵配置、必須存在的文件

基礎用法示例

<?php
// include.php - 被引入文件
function a() { b(); }
function b() { c(); }
function c() { echo 'bb'; }
a();

// main.php - 主文件
include 'include.php'; // 輸出: bb
echo a(); // 注意:a() 無返回值,此處輸出 NULL

// require 示例
require 'config/database.php'; // 必須存在,否則 500 錯誤
?>

_once 變體:防止重複引入

<?php
// 類定義文件必須使用 _once
require_once 'classes/User.php';
require_once 'classes/Database.php';

// 即使多次寫入,類只會定義一次,避免 "Cannot redeclare class" 錯誤
include_once 'header.php';
include_once 'header.php'; // 第二次無效果
?>

路徑解析機制與最佳實踐

  • 相對路徑:相對於**當前執行腳本**(入口文件)所在目錄,非被引入文件目錄。
  • 絕對路徑(推薦):
    require_once __DIR__ . '/../config/app.php';
    require_once dirname(__FILE__) . '/lib/autoload.php'; // PHP 5.2 兼容
  • include_path:設置後可省略路徑 include 'lib.php';,但**性能較差**(需遍歷多目錄查找),大型項目建議顯式路徑。

進階:動態引入與命名空間

<?php
// PSR-4 自動加載 (composer)
require_once __DIR__ . '/vendor/autoload.php';

use App\Models\User;
use App\Services\PaymentService;

// 運行時動態引入插件
$plugin = 'PaymentAlipay';
$file = __DIR__ . "/plugins/{$plugin}.php";
if (is_file($file)) {
    require_once $file;
    $class = "Plugins\\{$plugin}";
    if (class_exists($class)) {
        $instance = new $class();
    }
}
?>

常見坑點

  1. BOM 頭導致輸出:被引入文件保存為 UTF-8 with BOM,會在引入處輸出隱形字符,破壞 Header/JSON 輸出。
  2. 變量作用域:include 在函數內調用時,引入文件繼承函數作用域(非全局)。
  3. HTTP 封裝協議風險:include 'https://example.com/file.php'; 會執行遠端代碼,**極度危險**,確保 allow_url_include=Off。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved