ThinkPHP实现跨模块调用操作方法概述


Posted in PHP onJune 20, 2014

使用 $this 可以调用当前模块内的方法,但是很多情况下经常会在当前模块中调用其他模块的方法。ThinkPHP内置了A方法与R方法这两个特殊的大写字母方法来处理跨模块调用的问题。

目前Index模块内有index操作User模块有showName操作User模块及showName操作具体代码如下:

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

我们将在 Index 模块的 index 操作中调用上面的 showName 操作。

通过 A 方法跨模块调用操作

A 方法用于实例化其他模块(当于 new 关键字),模块被实例化之后,就可以以对象的方式调用模块内的操作。
在 Index 模块的 index 操作中调用 User 模块的 showName 操作实例:

<?php
class IndexAction extends Action{
 public function index(){
 header("Content-Type:text/html; charset=utf-8");
 // 实例化 User 模块
 $User = A('User');
 // 调用 User 模块中的方法
 $User->showName();
 }
}
?>

A 方法还支持跨分组调用和跨项目调用模块,语法如下:

A('<项目名://><分组名/>模块名')

// 常用例子如下
A('User') //调用当前项目的 User 模块,如上面的例子
A('Admin://User') //调用 Admin 项目的 User 模块
A('Admin/User') //调用 Admin 分组的 User 模块
A('Admin://Tool/User') //调用 Admin 项目 Tool 分组的 User 模块

通过 R 方法跨模块调用操作
ThinkPHP 还提供了 R 方法,可直接调用其他模块的操作方法,将上面使用 A 方法的例子更改为 R 方法:

<?php
class IndexAction extends Action{
 public function index(){
 header("Content-Type:text/html; charset=utf-8");
 // 调用 User 模块中的方法
 R('User/showName');
 }
}
?>

R 方法同样也支持跨分组调用和跨项目调用方法,语法如下:

R('<项目名://><分组名/>模块名/操作'<, array()>)

// 常用例子如下
R('User/showName') //调用当前项目的 User 模块的 showName 方法,如上面的例子
R('Admin://User/showName') //调用 Admin 项目 User 模块的 showName 方法
R('Admin/User/showName') //调用 Admin 分组 User 模块的 showName 方法
R('Admin://Tool/User/info') //调用 Admin 项目 Tool 分组的 User 模块的 info 方法
R 方法接收参数
R 方法也支持对调用的方法传入参数,因为实际上调动的操作,可能是需要传入参数的。
R 方法的第二个参数为数组,该数组将作为被调用操作的参数传入。如下面的例子所示:
R( 'User/showName',array(5) );

该例子表示 showName 操作将接受 5 这样一个参数。而对应的 showName 操作可能为:

<?php
class UserAction extends Action{
 public function showName($id){
 // 根据 id 参数获取用户信息的代码
 }
}
?>

要传入多个参数,那么将 R 方法的 array() 参数数组依次定义多个元素即可。

A 方法还是 R 方法?
从上面的例子可以看出,A 方法和 R 方法都可以调用其他模块的操作,那是使用 A 方法好还是 R 方法好呢?在此建议如下:如果要使用其他模块内的多个方法,那么建议使用 A 方法,通过对象的方式调用该模块的不同方法,避免多次实例化对象;如果只需要使用其他模块内的其中一个方法,那么无疑 R 方法是最简洁的

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
phpMyAdmin 安装配置方法和问题解决
Jun 08 PHP
适用于php-5.2 的 php.ini 中文版[金步国翻译]
Apr 17 PHP
phpword插件导出word文件时中文乱码问题处理方案
Aug 19 PHP
非常实用的PHP常用函数汇总
Dec 17 PHP
php简单统计字符串单词数量的方法
Jun 19 PHP
PHP简单实现DES加密解密的方法
Jul 12 PHP
Smarty模板常见的简单应用分析
Nov 15 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
May 02 PHP
PHP测试框架PHPUnit组织测试操作示例
May 28 PHP
PHP实现SMTP邮件的发送实例
Sep 27 PHP
Laravel中validation验证 返回中文提示 全局设置的方法
Sep 29 PHP
使用PHP开发留言板功能
Nov 19 PHP
ThinkPHP之getField详解
Jun 20 #PHP
ThinkPHP之N方法实例详解
Jun 20 #PHP
ThinkPHP之R方法实例详解
Jun 20 #PHP
ThinkPHP之import方法实例详解
Jun 20 #PHP
ThinkPHP之A方法实例讲解
Jun 20 #PHP
ThinkPHP之M方法实例详解
Jun 20 #PHP
php实现的短网址算法分享
Jun 20 #PHP
You might like
php正则表达式使用的详细介绍
2013/04/27 PHP
php计算数组不为空元素个数的方法
2014/01/27 PHP
Parse正式发布开源PHP SDK
2014/08/11 PHP
使用PHPMailer实现邮件发送代码分享
2014/10/23 PHP
JQuery 引发两次$(document.ready)事件
2010/01/15 Javascript
jquery 常用操作方法
2010/01/28 Javascript
javascript与CSS复习(三)
2010/06/29 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
2016/02/19 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
2016/10/12 Javascript
js实现上传文件添加和删除文件选择框
2016/10/24 Javascript
angular写一个列表的选择全选交互组件的示例
2018/01/22 Javascript
如何将你的AngularJS1.x应用迁移至React的方法
2018/02/01 Javascript
react的滑动图片验证码组件的示例代码
2019/02/27 Javascript
读懂CommonJS的模块加载
2019/04/19 Javascript
vue下载excel的实现代码后台用post方法
2019/05/10 Javascript
[00:03]DOTA2新版本PA至宝展示
2014/11/19 DOTA
python动态监控日志内容的示例
2014/02/16 Python
Python3中多线程编程的队列运作示例
2015/04/16 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
python3使用scrapy生成csv文件代码示例
2017/12/28 Python
python奇偶行分开存储实现代码
2018/03/19 Python
python多线程并发让两个LED同时亮的方法
2019/02/18 Python
浅谈PyQt5 的帮助文档查找方法,可以查看每个类的方法
2019/06/25 Python
python 操作hive pyhs2方式
2019/12/21 Python
Python 过滤错误log并导出的实例
2019/12/26 Python
CSS3近阶段篇之酷炫的3D旋转透视
2016/04/28 HTML / CSS
AmazeUI 单选框和多选框的实现示例
2020/08/18 HTML / CSS
我们是伦敦女孩:WalG
2018/01/08 全球购物
静态成员和非静态成员的区别
2012/05/12 面试题
Java基础类库面试题
2013/09/04 面试题
中专毕业自我鉴定
2013/10/16 职场文书
毕业自荐信
2013/12/16 职场文书
Python机器学习之PCA降维算法详解
2021/05/19 Python
Python字符串常规操作小结
2022/04/03 Python
让JavaScript代码更加精简的方法技巧
2022/06/01 Javascript
MySql统计函数COUNT的具体使用详解
2022/08/14 MySQL