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

ThinkPHP 實例化模型的四種方法完整解析

     編輯:PHP 綜合知識

ThinkPHP 提供多種模型實例化方式,適用不同業務複雜度與架構需求。理解四種方法的差異與適用場景,能寫出更彈性、可維護的資料層代碼。

四種實例化方法對比

方法語法特點適用場景
1. 基礎模型 (M)M('TableName')實例化內建 Model 類,直接操作表,單例模式簡單 CRUD、無自訂邏輯、臨時查詢
2. 自訂模型 (D - 字串)D('ModelName')實例化專案 Lib/Model/ 下自訂 Model 類,單例含業務邏輯、驗證、關聯、自動完成的標準模型
3. 跨模組/指定表的自訂模型M('TableName', 'ModelName') 或 D('Module.Model')指定表名 + 自訂模型類,或跨專案模組調用模型共用模型邏輯操作不同表、跨模組調用
4. 直接 new Modelnew Model() / new UserModel()非單例、每次新建實例,可直接寫 SQL複雜原生 SQL、多實例並行、測試模擬

詳細代碼範例

1. 基礎模型 M()

// Model/TestModel.class.php (可選,不建立也能用)
class TestModel extends Model {}

// Controller
public function test() {
    $test = M('test'); // 操作 test 表
    // 等同於 new TestModel();
    $list = $test->select();
    dump($list);
}

2. 自訂模型 D()

// Model/UserModel.class.php
class UserModel extends Model {
    public function pyj() { echo 'pengyanjie'; }
    // 可定義 _validate、_auto、關聯模型等
}

// Controller
public function user() {
    $user = D('User'); // 實例化 UserModel
    // 等同於 new UserModel();
    $user->pyj(); // 呼叫自訂方法
}

3. 指定表名 + 自訂模型類

public function love() {
    // 操作 test 表,但使用 UserModel 的邏輯 (含 pyj 等方法)
    $love = M('test', 'UserModel');
    // 等同於 new UserModel('test');
    $list = $love->select();
    dump($list);
    $love->pyj(); // 可用 UserModel 方法
}

4. 直接 new (非單例)

public function user() {
    $user = new UserModel(); // 每次新實例
    $list = $user->select();
    dump($list);
    echo $user->aa();
}

// Model/UserModel.class.php
class UserModel extends Model {
    // 類名 User 對應表 user,無需傳表名
    public function aa() { echo 'pengyanjie'; }
}

5. 空模型 + 原生 SQL

$model = new Model(); // 或 M()
$list = $model->query('SELECT * FROM think_user WHERE status=1');
// 需手動加表前綴,適用複雜 JOIN、UNION 等 ORM 難表達的查詢

D() vs new Model() 關鍵差異

特性D('Model')new Model()
單例模式是 (同模型同請求只建一次)否 (每次新建)
自動檢測類檔案是 (不存在拋異常)否 (需自行 require)
跨模組調用支援 D('Admin.User')需完整路徑 new \Admin\Model\UserModel()
適用場景標準 Controller 動作測試、腳本、多實例並行

跨模組調用範例

// 前台 Controller 調用後台 Admin 模組的 User 模型
$user = D('Admin.User');     // 方式一
$user = D('Admin', 'User');  // 方式二

選擇原則:**標準業務用 D()**,複雜報表/原生 SQL 用 new Model() 或 M()->query(),跨模組共用邏輯用 D('Module.Model')。

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