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 数组入门教程小结
May 20 PHP
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
Apr 09 PHP
php判断终端是手机还是电脑访问网站的思路及代码
Apr 24 PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
Mar 17 PHP
mantis安装、配置和使用中的问题小结
Jul 14 PHP
PHP操作MySQL事务实例
Nov 05 PHP
PHP生成静态HTML文档实现代码
Jun 23 PHP
php排序算法实例分析
Oct 17 PHP
PHP获取访问设备信息的方法示例
Feb 20 PHP
解决laravel 表单提交-POST 异常的问题
Oct 15 PHP
laravel 执行迁移回滚示例
Oct 23 PHP
php7连接MySQL实现简易查询程序的方法
Oct 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来自动调用不同服务器上的flash
2006/10/09 PHP
php中session退出登陆问题
2014/02/27 PHP
php中array_slice和array_splice函数解析
2016/10/18 PHP
删除重复数据的算法
2006/11/23 Javascript
firefox浏览器下javascript 拖动层效果与原理分析代码
2007/12/04 Javascript
JScript中使用ADODB.Stream判断文件编码的代码
2008/06/09 Javascript
JavaScript是否可实现多线程  深入理解JavaScript定时机制
2009/12/22 Javascript
Jquery实现仿腾讯微博发表广播
2014/11/17 Javascript
jQuery获取select选中的option的value值实现方法
2016/08/29 Javascript
bootstrap datetimepicker日期插件超详细使用方法介绍
2017/02/23 Javascript
Javascript实现的StopWatch功能示例
2017/06/13 Javascript
jQuery实现html双向绑定功能示例
2017/10/09 jQuery
JavaScript实现省市联动过程中bug的解决方法
2017/12/04 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
2018/09/28 Javascript
详解js中的几种常用设计模式
2020/07/16 Javascript
vue 项目@change多个参数传值多个事件的操作
2021/01/29 Vue.js
python找出列表中大于某个阈值的数据段示例
2019/11/24 Python
Python生成个性签名图片获取GUI过程解析
2019/12/16 Python
Pyside2中嵌入Matplotlib的绘图的实现
2021/02/22 Python
解决img标签上下出现间隙的方法
2016/12/14 HTML / CSS
英国在线自行车店:Merlin Cycles
2018/08/20 全球购物
西班牙三叶草药房:Farmacias Trébol
2019/05/03 全球购物
斯洛伐克最大的婴儿食品和用品网上商店:Feedo.sk
2020/12/21 全球购物
判断单链表中是否存在环
2012/07/16 面试题
协议书怎么写
2014/04/21 职场文书
小班评语大全
2014/05/04 职场文书
安全生产专项整治方案
2014/05/06 职场文书
副乡长群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
房产销售独家委托书范本
2014/10/01 职场文书
初三语文教学计划
2015/01/22 职场文书
2015年法务工作总结范文
2015/05/23 职场文书
借条格式范本
2015/05/25 职场文书
2016年秋季运动会通讯稿
2015/11/25 职场文书
详解NodeJS模块化
2021/06/15 NodeJs
python中24小时制转换为12小时制的方法
2021/06/18 Python
使用ICOM IC-R9500接收机同时测评十台收音机中波接收性能
2022/05/10 无线电