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

ThinkPHP 跨模塊調用詳解:A 方法實例化控制器 vs R 方法直接調用操作

     編輯:PHP 綜合知識

場景

Index 模塊需調用 User 模塊的 showName 操作。UserAction 代碼:

class UserAction extends Action {
    public function showName() { echo "Hello World"; }
}

方式一:A 方法 — 實例化控制器對象

class IndexAction extends Action {
    public function index() {
        header("Content-Type:text/html; charset=utf-8");
        $User = A('User');           // 實例化 UserAction
        $User->showName();           // 調用其方法
    }
}

A 方法語法擴展:

A('User')                    // 當前項目 User 模塊
A('Admin://User')            // 跨項目 Admin 項目 User 模塊
A('Admin/User')              // 跨分組 Admin 分組 User 模塊
A('Admin://Tool/User')       // 跨項目分組 Admin 項目 Tool 分組 User 模塊
A('User', 'Event')           // 實例化分層控制器 UserEvent (Lib/Event/UserEvent.class.php)

方式二:R 方法 — 直接調用操作方法

class IndexAction extends Action {
    public function index() {
        header("Content-Type:text/html; charset=utf-8");
        R('User/showName');      // 直接調用,返回值即操作返回值
    }
}

R 方法語法擴展:

R('User/showName')                    // 當前項目
R('Admin://User/showName')            // 跨項目
R('Admin/User/showName')              // 跨分組
R('Admin://Tool/User/info')           // 跨項目分組
R('User/showName', array(5))          // 傳參:showName($id) 接收 5
R('User/detail', array(5), 'Api')     // 指定控制器層 Api (UserApi::detail)

選擇建議

  • 需調用同一模塊多個方法 → 用 A 方法,實例化一次,多次調用,避免重複開銷;
  • 僅需調用單一方法 → 用 R 方法,代碼最簡潔,語義清晰。

最佳實踐: 官方建議將被公共調用的邏輯封裝為獨立接口層(如 Api 控制器層),而非在業務控制器間隨意互調,避免邏輯耦合混亂。

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