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的5个入手程序
Nov 23 PHP
MySQL授权问题总结
May 06 PHP
Smarty Foreach 使用说明
Mar 23 PHP
PHP中用hash实现的数组
Jul 17 PHP
php记录代码执行时间(实现代码)
Jul 05 PHP
PHP统一页面编码避免乱码问题
Apr 09 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
Sep 22 PHP
PHP调试及性能分析工具Xdebug详解
Feb 09 PHP
PHP面相对象中的重载与重写
Feb 13 PHP
PHP Swoole异步MySQL客户端实现方法示例
Oct 24 PHP
php文件上传原理与实现方法详解
Dec 20 PHP
基于PHP实现邮箱验证激活过程详解
Oct 28 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
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
2013/06/29 PHP
js控制input输入字符解析
2013/12/27 Javascript
javascript动态添加删除tabs标签的方法
2015/07/06 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
AngularJS基础 ng-srcset 指令简单示例
2016/08/03 Javascript
文件上传插件SWFUpload的使用指南
2016/11/29 Javascript
Javascript中构造函数要注意的一些坑
2017/01/23 Javascript
JS简单获取日期相差天数的方法
2017/04/24 Javascript
使用jQuery,Angular实现登录界面验证码详解
2017/04/27 jQuery
Vue.js中关于侦听器(watch)的高级用法示例
2018/05/02 Javascript
通过JavaScript下载文件到本地的方法(单文件)
2019/03/17 Javascript
简单了解Ajax表单序列化的实现方法
2019/06/14 Javascript
layer.js open 隐藏滚动条的例子
2019/09/05 Javascript
vue+ts下对axios的封装实现
2020/02/18 Javascript
微信小程序实现聊天室
2020/08/21 Javascript
[08:40]Navi Vs Newbee
2018/06/07 DOTA
Python实例一个类背后发生了什么
2016/02/09 Python
使用python和Django完成博客数据库的迁移方法
2018/01/05 Python
解决Spyder中图片显示太小的问题
2018/04/27 Python
解决python Markdown模块乱码的问题
2019/02/14 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
2020/06/09 Python
处理textarea中的换行和空格
2019/12/12 HTML / CSS
ALDI奥乐齐官方海外旗舰店:德国百年超市
2017/12/27 全球购物
Bally美国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/18 全球购物
什么是TCP/IP
2014/07/27 面试题
《北京的春节》教学反思
2014/04/07 职场文书
超市创业计划书
2014/04/24 职场文书
公司节能减排倡议书
2014/05/14 职场文书
给校长的建议书600字
2014/05/15 职场文书
物理学专业自荐信
2014/06/11 职场文书
伊琍体标语
2014/06/25 职场文书
习总书记三严三实学习心得体会
2014/10/13 职场文书
财务人员岗位职责
2015/02/03 职场文书
教师个人自我评价
2015/03/04 职场文书
创业计划之特色精品店
2019/08/12 职场文书
golang如何去除多余空白字符(含制表符)
2021/04/25 Golang