ThinkPHP实现跨模块调用操作方法概述

使用 $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相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《smarty模板入门基础教程》及《PHP模板技术总结》。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

(0)

相关推荐

  • ThinkPHP采用模块和操作分析

    任何一个WEB行为都可以认为是一个模块的某个操作,系统会根据当前的URL来分析要执行的模块和操作.这个分析工作由URL调度器来实现,官方内置了Dispatcher类来完成该调度. 在Dispatcher调度器中,会根据 http://servername/appName/moduleName/actionName/params 来获取当前需要执行的项目(appName). 模块(moduleName)和操作(actionName),在某些情况下,appName可以不需要(通常是网站的首页,因为项

  • thinkPHP5.0框架自动加载机制分析

    本文实例讲述了thinkPHP5.0框架自动加载机制.分享给大家供大家参考,具体如下: 概述 ThinkPHP5.0 真正实现了按需加载,所有类库采用自动加载机制,并且支持类库映射和composer类库的自动加载. 自动加载的实现由think\Loader类库完成,自动加载规范符合PHP的PSR-4. 自动加载 由于新版ThinkPHP完全采用了命名空间的特性,因此只需要给类库正确定义所在的命名空间,而命名空间的路径与类库文件的目录一致,那么就可以实现类的自动加载. 类库的自动加载检测顺序如下:

  • thinkphp中空模板与空模块的用法实例

    本文实例讲述了thinkphp中空模板与空模块的用法.分享给大家供大家参考.具体实现方法如下: 1. 空操作 复制代码 代码如下: function _empty($name){             $this-]show("$name 不存在 [a href='__APP__/Index/index']返回首页[/a]"); } 2. 空模块 复制代码 代码如下: class EmptyAction extends Action{         function index()

  • thinkPHP5.0框架命名空间详解

    本文实例讲述了thinkPHP5.0框架命名空间.分享给大家供大家参考,具体如下: 命名空间 ThinkPHP采用命名空间方式定义和自动加载类库文件,有效的解决了多模块和Composer类库之间的命名空间冲突问题,并且实现了更加高效的类库自动加载机制. 如果不清楚命名空间的基本概念,可以参考PHP手册:PHP命名空间 特别注意的是,如果你需要调用PHP内置的类库,或者第三方没有使用命名空间的类库,记得在实例化类库的时候加上 \,例如: // 错误的用法 $class = new stdClass

  • ThinkPHP写第一个模块应用

    找到项目文件夹下面的Lib/Action这个目录,在下面有个创建好的例子IndexAction.class.php,加入我们创建的是admin这个项目,那么./admin/Lib/Action/IndexAction.class.php,这个模块是默认加载的模块.在ThinkPHP中,自动加载的动作.方法.操作等等都是以index命名的. 下面,我们创建一个自己的模块,比如UserAction,class.php(注意命名规则),我们编辑这个文件: 复制代码 代码如下: <?php //先继承A

  • ThinkPHP访问不存在的模块跳转到404页面的方法

    首先在ACTION中新建一个文件EmptyAction.class.php,其代码如下: <?php class EmptyAction extends Action{ function _empty(){ header("HTTP/1.0 404 Not Found");//使HTTP返回404状态码 $this->display("Public:404"); } } ?> 使用apache服务器的情况下需在apache中的网站配置中加入 Err

  • 解密ThinkPHP3.1.2版本之模块和操作映射

    模板和操作映射功能是ThinkPHP3.1.2版本支持的对模块和操作设置的映射机制,由于可以通过改变配置动态改变(实际真正改变,并非别名)URL访问地址,加强了应用的安全性,而且,映射机制具有URL不区分大小写访问的特性,对于应用的迁移也有很大的帮助. 因为,普通情况下,如果需要更改URL的模块或者操作访问的话,需要改动的文件较多,容易导致关联性出错.尤其是很多应用需要迁移到新版本的时候,由于模型和控制器改动较多,导致URL地址出现大的调整,通过模块和操作映射功能,就可以很轻松的解决此类问题.

  • ThinkPHP空模块和空操作详解

    ThinkPHP的空模块和空操作也是很有实用意义的功能,空模块的概念就是当ThinkPHP找不到指定模块的时候,它会尝试去定位空模块(EmptyAction),执行空模块里面的index操作.同理,空操作也是同样的概念,当系统找不到指定模块下的操作方法的时候,就会尝试去定位空操作方法(empty).其实很好理解,就有点类似php虚拟主机里面的自定义404页面,但它比自定义404更加灵活,利用这个机制,我们可以实现错误页面和一些URL的优化,下面分别详细介绍下空模块和空操作的写法. 1.空模块,在

  • thinkPHP5.0框架引入Traits功能实例分析

    本文实例讲述了thinkPHP5.0框架引入Traits功能.分享给大家供大家参考,具体如下: ThinkPHP 5.0开始采用trait功能(PHP5.4+)来作为一种扩展机制,可以方便的实现一个类库的多继承问题. Traits 是一种为类似 PHP 的单继承语言而准备的代码复用机制.Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用方法集.Traits和类组合的语义是定义了一种方式来减少复杂性,避免传统多继承和混入类(Mixin)相关的典型问题. 但由于

  • thinkPHP5.0框架模块设计详解

    本文实例讲述了thinkPHP5.0框架模块设计.分享给大家供大家参考,具体如下: 5.0版本对模块的功能做了灵活设计,默认采用多模块的架构,并且支持单一模块设计,所有模块的命名空间均以app作为根命名空间(可配置更改). 目录结构 标准的应用和模块目录结构如下: ├─application           应用目录(可设置) │  ├─common             公共模块目录(可选) │  ├─common.php         公共函数文件 │  ├─route.php   

  • thinkphp隐藏index.php/home并允许访问其他模块的实现方法

    想要达成的效果很简单,我有两个模块,Home.Wechat. http://localhost/index.php/home/index/index 缩短为: http://localhost/index/index http://localhost/index.php/wechat/index/index 缩短为: http://localhost/wechat/index/index 隐藏index.php,这个比较简单,我开启.htaccess的支持就行,具体配置执行百度吧,我用的是apa

  • ThinkPHP中URL路径访问与模块控制器之间的关系

    ThinkPHP中URL路径访问与模块控制器之间的关系是ThinkPHP程序开发中非常重要的一个环节.熟练的掌握该技巧对于进一步学习ThinkPHP起着至关重要的作用.具体分析如下: 打开控制器页面: UserAction.class.php  //路径:admin\Lib\Action\   此处的admin为新建的项目对应的目录 我们都知道在Action里的方法默认为Public属性,私有属性的方法没法访问,但定义私有属性的方法也有其意义所在. 在其中定义私有方法的意义:主要体现在,能够在这

  • thinkphp3.2实现跨控制器调用其他模块的方法

    本文实例讲述了thinkphp3.2实现跨控制器调用其他模块的方法.分享给大家供大家参考,具体如下: thinphp中前台后台都有互相调用方法,这样可以省去重复内容. $hello = new \Admin\Common\Fun\hello(); $hello->hehe(); 调用其他地方的方法同理. 如果是在同控制器里模块名可以省略. 如调用common里面的某个类的方法: $hello = new \Common\Fun\hello(); $hello->hehe(); 框架里面提供了跨

随机推荐