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数据库操作面向对象的优点
Oct 09 PHP
Discuz! Passport 通行证整合
Mar 27 PHP
PHP无限分类代码,支持数组格式化、直接输出菜单两种方式
May 18 PHP
php学习笔记 数组的常用函数
Jun 13 PHP
php max_execution_time执行时间问题
Jul 17 PHP
PHP中CURL方法curl_setopt()函数的参数分享
Jan 19 PHP
深入for,while,foreach遍历时间比较的详解
Jun 08 PHP
浅析ThinkPHP中execute和query方法的区别
Jun 13 PHP
php上传文件常见问题总结
Feb 03 PHP
Zend Framework动作助手Redirector用法实例详解
Mar 05 PHP
PHP常用的三种设计模式汇总
Aug 28 PHP
使用WAMP搭建PHP本地开发环境
May 10 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数据类型转换
2014/01/09 PHP
php实现网站顶踩功能的完整前端代码
2015/07/19 PHP
PHP实现导出带样式的Excel
2016/08/28 PHP
js/html光标定位的实现代码
2013/09/23 Javascript
js浮点数保留两位小数点示例代码(四舍五入)
2013/12/26 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
2015/05/06 Javascript
清除输入框内的空格
2016/12/21 Javascript
js实现定时进度条完成后切换图片
2017/01/04 Javascript
基于Vue中点击组件外关闭组件的实现方法
2018/03/06 Javascript
Vue+axios实现统一接口管理的方法
2018/07/23 Javascript
微信小程序引用iconfont图标的方法
2018/10/22 Javascript
jquery实现动态创建form并提交的方法示例
2019/05/27 jQuery
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
微信小程序设置滚动条过程详解
2019/07/25 Javascript
JavaScript enum枚举类型定义及使用方法
2020/05/15 Javascript
微信小程序拖拽排序列表的示例代码
2020/07/08 Javascript
如何通过JS实现日历简单算法
2020/10/14 Javascript
介绍Python的Django框架中的静态资源管理器django-pipeline
2015/04/25 Python
Python 查看文件的读写权限方法
2018/01/23 Python
matplotlib subplots 调整子图间矩的实例
2018/05/25 Python
python 顺时针打印矩阵的超简洁代码
2018/11/14 Python
对python pandas读取剪贴板内容的方法详解
2019/01/24 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
2019/05/23 Python
python之mock模块基本使用方法详解
2019/06/27 Python
如何使用Flask-Migrate拓展数据库表结构
2019/07/24 Python
python统计字符的个数代码实例
2020/02/07 Python
利用html5 file api读取本地文件示例(如图片、PDF等)
2018/03/07 HTML / CSS
全球最大的网上自行车商店:Chain Reaction Cycles
2016/12/02 全球购物
世界上最大的二手相机店:KEN
2017/05/17 全球购物
瑞典的玛丽小姐:Miss Mary of Sweden
2019/02/13 全球购物
Regatta官网:英国最受欢迎的户外服装和鞋类品牌
2019/05/01 全球购物
畜牧兽医本科生个人的自我评价
2013/10/11 职场文书
五一手机促销方案
2014/03/08 职场文书
党风廉政建设个人总结
2015/03/06 职场文书
幼师辞职信范文大全
2015/05/12 职场文书
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
2021/04/05 MySQL