實作一個 load_class() 函數,根據傳入的模型名稱,自動從指定目錄載入對應的類別檔案並實例化,同時利用靜態變數快取已建立的物件,避免重複實例化,提升效能。
function load_class($class_name, $param = null, $instantiate = true) {
static $objects = array();
// 統一類別名稱格式:首字大寫
$class_name = ucfirst(strtolower($class_name));
// 若已存在快取,直接返回
if (isset($objects[$class_name])) {
return $objects[$class_name];
}
// 組裝類別檔案路徑
$class_file = DIR_MODELS . "/{$class_name}.inc.php";
if (file_exists($class_file)) {
require_once $class_file;
if (!class_exists($class_name)) {
return false;
} else {
// 實例化並存入快取
$objects[$class_name] =& new $class_name($param);
return $objects[$class_name];
}
} else {
// 找不到檔案時,依 $instantiate 參數決定是否標記為 null
if ($instantiate) {
$objects[$class_name] = null;
}
return null;
}
}
$objects: 函數結束後不釋放,下次呼叫保留已實例化的物件,達到單例快取效果。new $class_name($param): PHP 允許使用字串變數作為類別名稱實例化,極具彈性。User.inc.php 對應 User 類別),利於維護。$instantiate 參數: 若為 true,找不到檔案時仍在快取寫入 null,避免重複檢查檔案系統。$param,可引入 call_user_func_array 或 ...$args 變參語法(PHP 5.6+)處理多參數。spl_autoload_register(): 將檔案存在性檢查交給自動載入機制,但需注意 interface_exists 等函數也會觸發自動載入,相容性需評估。PHP 官方手冊:類別與物件 (PHP 5) — 系統性學習現代 PHP 物件導向程式設計。
實作一個 load_class() 函數,根據傳入的模型名稱,自動從指定目錄載入對應的類別檔案並實例化,同時利用靜態變數快取已建立的物件,避免重複實例化,提升效能。
function load_class($class_name, $param = null, $instantiate = true) {
static $objects = array();
// 統一類別名稱格式:首字大寫
$class_name = ucfirst(strtolower($class_name));
// 若已存在快取,直接返回
if (isset($objects[$class_name])) {
return $objects[$class_name];
}
// 組裝類別檔案路徑
$class_file = DIR_MODELS . "/{$class_name}.inc.php";
if (file_exists($class_file)) {
require_once $class_file;
if (!class_exists($class_name)) {
return false;
} else {
// 實例化並存入快取
$objects[$class_name] =& new $class_name($param);
return $objects[$class_name];
}
} else {
// 找不到檔案時,依 $instantiate 參數決定是否標記為 null
if ($instantiate) {
$objects[$class_name] = null;
}
return null;
}
}
$objects: 函數結束後不釋放,下次呼叫保留已實例化的物件,達到單例快取效果。new $class_name($param): PHP 允許使用字串變數作為類別名稱實例化,極具彈性。User.inc.php 對應 User 類別),利於維護。$instantiate 參數: 若為 true,找不到檔案時仍在快取寫入 null,避免重複檢查檔案系統。$param,可引入 call_user_func_array 或 ...$args 變參語法(PHP 5.6+)處理多參數。spl_autoload_register(): 將檔案存在性檢查交給自動載入機制,但需注意 interface_exists 等函數也會觸發自動載入,相容性需評估。PHP 官方手冊:類別與物件 (PHP 5) — 系統性學習現代 PHP 物件導向程式設計。