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

PHP 專案架構最佳實踐:使用包含檔案組織配置與共用邏輯

     編輯:PHP 綜合知識

善用 include()/require() 將配置、初始化與共用路徑集中管理,能大幅減少重複代碼、簡化部署遷移,是 PHP 專案結構化的基石。本文提出「雙層包含檔」架構模式。

核心理念:集中化、無硬編碼、環境無關

  • 所有路徑、資料庫連線、URL 根路徑集中定義一次。
  • 專案從開發機遷移至正式機只需修改 1~2 個檔案。
  • 每個 PHP 頁面頂部僅需 require_once('app-top.php')。

第一層:config.php —— 純配置常數

<?php
// config.php
define('DB_HOST', 'localhost');
define('DB_USER', 'app_user');
define('DB_PASS', 'secret');
define('DB_NAME', 'myapp');
define('TABLE_PREFIX', 'app_');     // 資料表前綴,防衝突

define('SERVER_URL', 'https://localhost'); // 開發機
define('APP_FOLDER', '/myapp/');          // 子目錄,正式機改為 '/'

// 衍生常數(不直接使用,供 app-top.php 參考)
?>

第二層:app-top.php —— 初始化與衍生常數

<?php
// app-top.php
ob_start('ob_gzhandler');   // 輸出緩衝 + GZIP
session_start();
error_reporting(E_ALL);

require_once('config.php');

// 衍生常數:所有路徑/URL 統一在此定義
define('APP_URL', SERVER_URL . APP_FOLDER);
define('SERVER_DOC_ROOT', $_SERVER['DOCUMENT_ROOT']);
define('APP_DIR', SERVER_DOC_ROOT . APP_FOLDER);
define('INCLUDES_DIR', APP_DIR . 'includes/');
define('LIB_DIR', APP_DIR . 'lib/');
define('UPLOADS_DIR', APP_DIR . 'uploads/');
define('UPLOADS_URL', APP_URL . 'uploads/');

// 資料庫連線
$link = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if (!$link) {
    exit("資料庫連線失敗: " . mysqli_connect_error());
}
mysqli_set_charset($link, 'utf8mb4');
?>

頁面使用範例

<?php
// 任何業務頁面
require_once('app-top.php'); // 僅需這一行

// 使用衍生常數引入其他檔案
require_once(INCLUDES_DIR . 'header.php');
require_once(LIB_DIR . 'UserService.php');

$userSvc = new UserService($link);
$users = $userSvc->getAll();
?>
<html>...</html>

為什麼分兩個檔案?

分離後,安裝腳本只需寫入 config.php,不必動到邏輯層;正式部署時以 config.php.dist 為範本複製修改,降低洩露風險。

現代化延伸:Composer + PSR-4 + .env

  • 新專案建議採用 Composer 自動載入 (PSR-4) 取代手動 require。
  • 敏感配置改用 vlucas/phpdotenv 讀取 .env,不入版控。
  • 資料庫存取改用 PDO 或 Eloquent/Doctrine ORM。

雖然現代框架已內建上述機制,但理解「包含檔架構」的核心動機,有助於在輕量專案或維護舊系統時做出正確的架構決策。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
檔案職責修改頻率部署差異
config.php敏感配置(DB帳密、URL根路徑)低各環境不同,需手動調整
app-top.php初始化邏輯、衍生常數、共用服務中程式碼層面,版控同步即可