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 相关文章推荐
人大复印资料处理程序_查询篇
Oct 09 PHP
php&amp;java(二)
Oct 09 PHP
php mssql 日期出现中文字符的解决方法
Mar 10 PHP
用来解析.htpasswd文件的PHP类
Sep 05 PHP
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
Apr 08 PHP
PHP设置图片文件上传大小的具体实现方法
Oct 11 PHP
一个php短网址的生成代码(仿微博短网址)
May 07 PHP
PHP判断上传文件类型的解决办法
Oct 20 PHP
PHP Yii框架之表单验证规则大全
Nov 16 PHP
PHP中cookie知识点学习
May 06 PHP
Laravel5框架自定义错误页面配置操作示例
Apr 17 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
Apr 04 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
有关JSON以及JSON在PHP中的应用
2010/04/09 PHP
php笔记之常用文件操作
2010/10/12 PHP
PHP+MySQL使用mysql_num_rows实现模糊查询图书信息功能
2018/05/31 PHP
laravel实现上传图片,并且制作缩略图,按照日期存放的代码
2019/10/16 PHP
javascript 一些用法小结
2009/09/11 Javascript
Javascript 圆角div的实现代码
2009/10/15 Javascript
js限制文本框为整数和货币的函数代码
2010/10/13 Javascript
关于jquery的多个选择器的使用示例
2013/10/18 Javascript
Window.Open如何在同一个标签页打开
2014/06/20 Javascript
Javascript学习笔记之函数篇(六) : 作用域与命名空间
2014/11/23 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
input框中自动展示当前日期yyyy/mm/dd的实现方法
2017/07/06 Javascript
对angularJs中2种自定义服务的实例讲解
2018/09/30 Javascript
Vue.js 事件修饰符的使用教程
2018/11/01 Javascript
总结4个方面优化Vue项目
2019/02/11 Javascript
JavaScript canvas绘制折线图
2020/02/18 Javascript
JS正则表达式验证密码强度
2020/03/18 Javascript
详解JSON.stringify()的5个秘密特性
2020/05/26 Javascript
python中ConfigParse模块的用法
2014/09/29 Python
将Emacs打造成强大的Python代码编辑工具
2015/11/20 Python
Django自定义认证方式用法示例
2017/06/23 Python
查看Django和flask版本的方法
2018/05/14 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
2018/11/14 Python
python自带tkinter库实现棋盘覆盖图形界面
2019/07/17 Python
Python实现二叉搜索树BST的方法示例
2019/07/30 Python
Selenium自动化测试工具使用方法汇总
2020/06/12 Python
Evisu官方网站:日本牛仔品牌,时尚街头设计风格
2016/12/30 全球购物
阿玛尼美妆加拿大官方商城:Giorgio Armani Beauty加拿大
2017/10/24 全球购物
SQL Server笔试题
2012/01/10 面试题
Linux如何压缩可执行文件
2013/10/21 面试题
关于青春的演讲稿800字
2014/08/22 职场文书
教师党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
寒假社会实践个人总结
2015/03/06 职场文书
Redis如何一键部署脚本
2021/04/12 Redis
JavaScript 对象创建的3种方法
2021/11/17 Javascript
基于PyQT5制作一个桌面摸鱼工具
2022/02/15 Python