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面向对象的方法重载两种版本比较
Sep 08 PHP
phpize的深入理解
Jun 03 PHP
PHP 清空varnish 缓存的详解(包括指定站点下的)
Jun 20 PHP
PHP is_subclass_of函数的一个BUG和解决方法
Jun 01 PHP
php实现的双向队列类实例
Sep 24 PHP
php设置静态内容缓存时间的方法
Dec 01 PHP
php使用数组填充下拉列表框的方法
Mar 31 PHP
Yii2实现中国省市区三级联动实例
Feb 08 PHP
数组任意位置插入元素,删除特定元素的实例
Mar 02 PHP
thinkPHP微信分享接口JSSDK用法实例
Jul 07 PHP
php实现网页端验证码功能
Jul 11 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
Aug 13 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 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
2012/10/05 PHP
调整PHP的性能
2013/10/30 PHP
ThinkPHP实现一键清除缓存方法
2014/06/26 PHP
php基于openssl的rsa加密解密示例
2016/07/11 PHP
PHP调用其他文件中的类
2018/04/02 PHP
jQuery DOM操作小结与实例
2010/01/07 Javascript
WEB 浏览器兼容 推荐收藏
2010/05/14 Javascript
21个值得收藏的Javascript技巧
2014/02/04 Javascript
js 左右悬浮对联广告代码示例
2014/12/12 Javascript
js实现动画特效的文字链接鼠标悬停提示的方法
2015/03/02 Javascript
javascript中字体浮动效果的简单实例演示
2015/11/18 Javascript
果断收藏9个Javascript代码高亮脚本
2016/01/06 Javascript
jquery mobile开发常见问题分析
2016/01/21 Javascript
jQuery+HTML5+CSS3制作支持响应式布局时间轴插件
2016/08/10 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
vue自定v-model实现表单数据双向绑定问题
2018/09/03 Javascript
vue之a-table中实现清空选中的数据
2019/11/07 Javascript
[39:19]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第二场 11.26
2020/11/30 DOTA
Python读取excel中的图片完美解决方法
2018/07/27 Python
Django实现学员管理系统
2019/02/26 Python
Python Django基础二之URL路由系统
2019/07/18 Python
浅谈Python线程的同步互斥与死锁
2020/03/22 Python
前端H5 Video常见使用场景简介
2020/08/21 HTML / CSS
亚马逊中国官方网站:amazon.cn
2017/05/25 全球购物
中国跨镜手机配件批发在线商店:TVC-Mall
2019/08/20 全球购物
天逸系统(武汉)有限公司Java笔试题
2015/12/29 面试题
介绍一下JNDI的基本概念
2013/07/26 面试题
String、StringBuffer、StringBuilder有区别
2015/09/18 面试题
国际商务专业学生个人的自我评价
2013/09/28 职场文书
审计局班子四风对照检查材料思想汇报
2014/10/07 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
管理者日常工作必备:22条企业管理流程模板!
2019/07/12 职场文书
Python3 使用pip安装git并获取Yahoo金融数据的操作
2021/04/08 Python
python 自动化偷懒的四个实用操作
2021/04/11 Python
Python 绘制多因子柱状图
2022/05/11 Python
MySQL中order by的执行过程
2022/06/05 MySQL