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 28 PHP
php旋转图片90度的方法
Nov 07 PHP
php实现window平台的checkdnsrr函数
May 27 PHP
php实现的简易扫雷游戏实例
Jul 09 PHP
php实现当前页面点击下载文件的实例代码
Nov 16 PHP
PHP在linux上执行外部命令的方法
Feb 06 PHP
PHP中overload与override的区别
Feb 13 PHP
Laravel中的Auth模块详解
Aug 17 PHP
stripos函数知识点实例分享
Feb 11 PHP
PHP模糊查询技术实例分析【附源码下载】
Mar 07 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
Jul 20 PHP
Laravel框架源码解析之模型Model原理与用法解析
May 14 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
smarty静态实验表明,网络上是错的~呵呵
2006/11/25 PHP
php生成SessionID和图片校验码的思路和实现代码
2009/03/10 PHP
php分页函数示例代码分享
2014/02/24 PHP
PHP信号量基本用法实例详解
2016/02/12 PHP
thinkPHP和onethink微信支付插件分享
2019/08/11 PHP
js小技巧--自动隐藏红叉叉
2007/08/13 Javascript
XMLHTTPRequest的属性和方法简介
2010/11/23 Javascript
关于图片的预加载过程中隐藏未知的
2012/12/19 Javascript
jquery cookie的用法总结
2013/11/18 Javascript
关于JS数组追加数组采用push.apply的问题
2014/06/09 Javascript
JS实现IE状态栏文字缩放效果代码
2015/10/24 Javascript
jQuery移动web开发中的页面初始化与加载事件
2015/12/03 Javascript
Highcharts入门之基本属性
2016/08/02 Javascript
AngularGauge 属性解析详解
2016/09/06 Javascript
初识NodeJS服务端开发入门(Express+MySQL)
2017/04/07 NodeJs
vue.js全局API之nextTick全面解析
2017/07/07 Javascript
vue+iview写个弹框的示例代码
2017/12/05 Javascript
基于JS实现带动画效果的流程进度条
2018/06/01 Javascript
微信小程序实现商品属性联动选择
2019/02/15 Javascript
JavaScript工具库MyTools详解
2020/01/01 Javascript
vue-router为激活的路由设置样式操作
2020/07/18 Javascript
在Python中操作时间之strptime()方法的使用
2020/12/30 Python
python+selenium打印当前页面的titl和url方法
2018/06/22 Python
在python中将list分段并保存为array类型的方法
2019/07/15 Python
Python K最近邻从原理到实现的方法
2019/08/15 Python
Python pickle模块实现对象序列化
2019/11/22 Python
如何在mac环境中用python处理protobuf
2019/12/25 Python
python 邮件检测工具mmpi的使用
2021/01/04 Python
Python使用tkinter制作在线翻译软件
2021/02/22 Python
德国原装品牌香水、化妆品和手表网站:BRASTY.DE
2016/10/16 全球购物
Marc O’Polo俄罗斯官方在线商店:德国高端时尚品牌
2019/12/26 全球购物
数据管理员的自我评价分享
2013/11/15 职场文书
挂职学习心得体会
2014/09/09 职场文书
教师工作证明范本
2015/06/12 职场文书
2016年禁毒宣传活动总结
2016/04/05 职场文书
长辈生日祝福语大全(72句)
2019/08/09 职场文书