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查询域名状态whois的类
Nov 25 PHP
提高php运行速度的一些小技巧分享
Jul 03 PHP
使用php 获取时间今天明天昨天时间戳的详解
Jun 20 PHP
使用php判断服务器是否支持Gzip压缩功能
Sep 24 PHP
本地计算机无法启动Apache故障处理
Aug 08 PHP
PHP文件缓存内容保存格式实例分析
Aug 20 PHP
ThinkPHP分页实例
Oct 15 PHP
基于PHP实现简单的随机抽奖小程序
Jan 05 PHP
深入理解PHP类的自动载入机制
Sep 16 PHP
Laravel框架Request、Response及Session操作示例
May 06 PHP
在TP5数据库中四个字段实现无限分类的示例
Oct 18 PHP
PHP高并发和大流量解决方案整理
Dec 24 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 小心urldecode引发的SQL注入漏洞
2011/10/27 PHP
测试php连接mysql是否成功的代码分享
2014/01/24 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
详解PHP实现支付宝小程序用户授权的工具类
2018/12/25 PHP
javascript学习笔记(十四) window对象使用介绍
2012/06/20 Javascript
文本框中禁止非数字字符输入比如手机号码、邮编
2013/08/19 Javascript
js实现单行文本向上滚动效果实例代码
2013/11/28 Javascript
JavaScript数组常用操作技巧汇总
2014/11/17 Javascript
JavaScript实现控制打开文件另存为对话框的方法
2015/04/17 Javascript
动态加载jQuery的两种方法实例分析
2015/07/17 Javascript
JS实现先显示大图后自动收起显示小图的广告代码
2015/09/04 Javascript
webpack常用配置项配置文件介绍
2016/11/07 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
2017/03/08 Javascript
深入了解响应式React Native Echarts组件
2019/05/29 Javascript
Js通过AES加密后PHP用Openssl解密的方法
2019/07/12 Javascript
超轻量级的js时间库miment使用解析
2019/08/02 Javascript
[03:08]TI9战队档案 - Vici Gaming
2019/08/20 DOTA
Python 正则表达式操作指南
2009/05/04 Python
Python之日期与时间处理模块(date和datetime)
2017/02/16 Python
python django使用haystack:全文检索的框架(实例讲解)
2017/09/27 Python
浅谈numpy库的常用基本操作方法
2018/01/09 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
Python实现的线性回归算法示例【附csv文件下载】
2018/12/29 Python
django之从html页面表单获取输入的数据实例
2020/03/16 Python
Python实现RabbitMQ6种消息模型的示例代码
2020/03/30 Python
基于python实现计算两组数据P值
2020/07/10 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
老板电器官方购物商城:老板油烟机、燃气灶、消毒柜、电烤箱
2018/05/30 全球购物
世界上最值得信赖的多日游在线市场:TourRadar
2018/07/20 全球购物
Kate Spade澳大利亚官方网站:美国设计师手袋品牌
2019/09/10 全球购物
安全生产网格化管理实施方案
2014/03/01 职场文书
入党积极分子学习两会心得体会范文
2014/03/17 职场文书
个人剖析材料范文
2014/09/30 职场文书
阿凡达观后感
2015/06/10 职场文书
《三国志》赏析
2019/08/27 职场文书
Redis读写分离搭建的完整步骤
2021/09/14 Redis