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

CodeIgniter autoload.php 自動載入配置深度解析:優缺點與最佳實踐

     編輯:PHP 綜合知識

autoload.php 作用

系統啟動時自動載入的資源:Libraries、Helpers、Models、Config、Language 等,無需在控制器手動 $this->load->library()。

配置範例

$autoload['libraries'] = ['database', 'session', 'email'];
$autoload['helper'] = ['url', 'form', 'my_app_helper'];
$autoload['model'] = ['User_model', 'Log_model'];
$autoload['config'] = ['app_config'];
$autoload['language'] = ['common'];

優點

  • 全域可用,控制器/模型/視圖直接呼叫
  • 減少重複 load 程式碼
  • 核心服務 (DB、Session) 確保優先初始化

缺點與風險

  1. 記憶體浪費:前台/後台/API 共用同一組載入,未用到的類別佔用資源
  2. 耦合度高:類別隱性依賴自動載入,單元測試困難
  3. 初始化順序陷阱:Library 之間有依賴時順序敏感
  4. 難以條件式載入:如「僅後台需載入權限庫」

最佳實踐建議

1. 只載入真正全域核心服務

$autoload['libraries'] = ['database', 'session']; // 極精簡

2. 按需載入:建立基底控制器

// core/MY_Controller.php
class MY_Controller extends CI_Controller {
    public function __construct() {
        parent::__construct();
        $this->load->helper('url'); // 幾乎每頁都用
    }
}

// 後台基底
class Admin_Controller extends MY_Controller {
    public function __construct() {
        parent::__construct();
        $this->load->library('acl'); // 僅後台需權限
        $this->load->model('admin/User_model');
    }
}

// API 基底
class Api_Controller extends MY_Controller {
    public function __construct() {
        parent::__construct();
        $this->load->library('jwt_auth');
        $this->output->set_content_type('application/json');
    }
}

3. 使用 Composer 自動載入取代 CI Loader (現代化)

// composer.json
{
    "autoload": {
        "psr-4": {
            "App\\": "application/",
            "Modules\\": "application/modules/"
        }
    }
}

服務類別改為獨立類別,透過建構子注入依賴,完全脫離 CI Loader,可單獨測試、跨框架復用。

總結

autoload.php 適合極小型專案或快速原型。中大型專案建議:核心服務自動載入 + 模組基底控制器按需載入 + 領域邏輯用 Composer PSR-4 獨立類別。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved