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生成EXCEL的东东
Oct 09 PHP
Smarty模板快速入门
Jan 04 PHP
php 大数据量及海量数据处理算法总结
May 07 PHP
PHP之APC缓存详细介绍 apc模块安装
Jan 13 PHP
php中sql注入漏洞示例 sql注入漏洞修复
Jan 24 PHP
CodeIgniter框架过滤HTML危险代码
Jun 12 PHP
PHP开发框架Laravel数据库操作方法总结
Sep 03 PHP
smarty中常用方法实例总结
Aug 07 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
Mar 25 PHP
PHP将URL转换成短网址的算法分享
Sep 13 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
Aug 01 PHP
php 获取xml接口数据的处理方法
May 31 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 数据结构 算法 三元组 Triplet
2011/07/02 PHP
php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
2011/10/31 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
php调整服务器时间的方法
2015/04/03 PHP
PHP MPDF中文乱码的解决方式
2015/12/08 PHP
Yii2框架BootStrap样式的深入理解
2016/11/07 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
2017/10/19 PHP
JavaScript 事件对象的实现
2009/07/13 Javascript
ExtJS下grid的一些属性说明
2009/12/13 Javascript
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
2010/03/14 Javascript
输入密码检测大写是否锁定js实现代码
2012/12/03 Javascript
浅谈JavaScript中null和undefined
2015/07/09 Javascript
jquery实现点击查看更多内容控制段落文字展开折叠效果
2015/08/06 Javascript
详细分析Javascript中创建对象的四种方式
2016/08/17 Javascript
Bootstrap CSS组件之分页(pagination)和翻页(pager)
2016/12/17 Javascript
基于Bootstrap的标签页组件及bootstrap-tab使用说明
2017/07/25 Javascript
浅谈React Native 中组件的生命周期
2017/09/08 Javascript
vue 监听键盘回车事件详解 @keyup.enter || @keyup.enter.native
2018/08/25 Javascript
jQuery滑动效果实现方法分析
2018/09/05 jQuery
React Native中Mobx的使用方法详解
2018/12/04 Javascript
JS document form表单元素操作完整示例
2020/01/13 Javascript
Python创建模块及模块导入的方法
2015/05/27 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
2017/12/12 Python
Python3多进程 multiprocessing 模块实例详解
2018/06/11 Python
python-opencv颜色提取分割方法
2018/12/08 Python
Numpy的简单用法小结
2019/08/28 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
2020/02/17 Python
windows10在visual studio2019下配置使用openCV4.3.0
2020/07/14 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
CSS3 实现图形下落动画效果
2020/11/13 HTML / CSS
如何用Python输出一个Fibonacci数列
2016/08/28 面试题
中学图书馆工作总结
2015/08/11 职场文书
MySQL 存储过程的优缺点分析
2021/05/20 MySQL
MybatisPlus代码生成器的使用方法详解
2021/06/13 Java/Android
世界十大评分最高的动漫,CLANNAD上榜,第八赚足人们眼泪
2022/03/18 日漫
MySQL 自动填充 create_time 和 update_time
2022/05/20 MySQL