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 相关文章推荐
PHP 远程关机实现代码
Nov 10 PHP
php 无极分类(递归)实现代码
Jan 05 PHP
PHP安全性漫谈
Jun 28 PHP
php写的带缓存数据功能的mysqli类
Sep 06 PHP
解析PHP高效率写法(详解原因)
Jun 20 PHP
php数组去重实例及分析
Nov 26 PHP
php生成shtml类用法实例
Dec 09 PHP
PHP使用pear自带的mail类库发邮件的方法
Jul 08 PHP
Laravel搭建后台登录系统步骤详解
Jul 26 PHP
详解Yii2 之 生成 URL 的方法
Jun 16 PHP
PHP环形链表实现方法示例
Sep 15 PHP
ThinkPHP5与单元测试PHPUnit使用详解
Feb 23 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
ThinkPHP中Session用法详解
2014/11/29 PHP
iis6+javascript Add an Extension File
2007/06/13 Javascript
JQuery优缺点分析说明
2010/06/09 Javascript
js,jQuery 排序的实现代码,网页标签排序的实现,标签排序
2011/04/27 Javascript
onkeydown事件解决按回车键直接提交数据的需求
2013/04/11 Javascript
js防止表单重复提交的两种方法
2013/09/30 Javascript
JS取request值以及自动执行使用示例
2014/02/24 Javascript
Bootstrap每天必学之工具提示(Tooltip)插件
2016/04/26 Javascript
【经验总结】编写JavaScript代码时应遵循的14条规律
2016/06/20 Javascript
jquery 动态合并单元格的实现方法
2016/08/26 Javascript
AngularJS入门教程之模块化操作用法示例
2016/11/02 Javascript
基于JavaScript实现滑动门效果
2017/03/16 Javascript
Angular2使用Angular CLI快速搭建工程(一)
2017/05/21 Javascript
Webpack打包css后z-index被重新计算的解决方法
2017/06/18 Javascript
vue-cli项目根据线上环境分别打出测试包和生产包
2018/05/23 Javascript
优雅地使用loading(推荐)
2019/04/20 Javascript
基于JavaScript或jQuery实现网站夜间/高亮模式
2020/05/30 jQuery
django模型中的字段和model名显示为中文小技巧分享
2014/11/18 Python
python sort、sorted高级排序技巧
2014/11/21 Python
Python判断值是否在list或set中的性能对比分析
2016/04/16 Python
python最长回文串算法
2018/06/04 Python
python实现蒙特卡罗方法教程
2019/01/28 Python
学习python分支结构
2019/05/17 Python
在Python3 numpy中mean和average的区别详解
2019/08/24 Python
pandas 像SQL一样使用WHERE IN查询条件说明
2020/06/05 Python
基于Tensorflow的MNIST手写数字识别分类
2020/06/17 Python
廉价航班、机票和酒店:JustFly
2018/02/07 全球购物
中兴通讯全球官方网站:ZTE
2020/12/26 全球购物
初中生自我评价
2014/02/01 职场文书
创先争优一句话承诺
2014/05/29 职场文书
领导工作表现评语
2015/01/04 职场文书
撤诉书怎么写
2015/05/19 职场文书
小学四年级班主任工作经验交流材料
2015/11/02 职场文书
2016幼儿园教师节新闻稿
2015/11/25 职场文书
合作协议书格式范本
2016/03/21 职场文书
SpringCloud的JPA连接PostgreSql的教程
2021/06/26 Java/Android