1. ThinkPHP 跨模块调用操作方法(A方法与R方法)
  2. 跨模块调用操作方法

    前面说了可以使用 $this 来调用当前模块内的方法,但实际情况中还经常会在当前模块调用其他模块的方法。ThinkPHP 内置了 A 方法与 R 方法这两个特殊的大写字母方法来处理跨模块调用的问题。

    目前 Index 模块内有 index 操作,User 模块有 showName 操作,User 模块及 showName 操作具体代码如下:

    <?php

    class UserAction extends Action{

    public function showName(){

    echo "我叫小明。";

    }

    }

    ?>

    我们将在 Index 模块的 index 操作中调用上面的 showName 操作。

  3. 通过 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 模块

    提示:关于项目分组的知识会在后面的教程学习到。

  4. 通过 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 方法

  5. R 方法接收参数

    R 方法也支持对调用的方法传入参数,因为实际上调动的操作,可能是需要传入参数的。

    R 方法的第二个参数为数组,该数组将作为被调用操作的参数传入。如下面的例子所示:

    R( 'User/showName',array(5) );

    该例子表示 showName 操作将接受 5 这样一个参数。而对应的 showName 操作可能为:

    <?php

    class UserAction extends Action{

    public function showName($id){

    // 根据 id 参数获取用户信息的代码

    }

    }

    ?>

    要传入多个参数,那么将 R 方法的 array() 参数数组依次定义多个元素即可。

  6. A 方法还是 R 方法?

    从上面的例子可以看出,A 方法和 R 方法都可以调用其他模块的操作,那是使用 A 方法好还是 R 方法好呢?在此建议如下:如果要使用其他模块内的多个方法,那么建议使用 A 方法,通过对象的方式调用该模块的不同方法,避免多次实例化对象;如果只需要使用其他模块内的其中一个方法,那么无疑 R 方法是最简洁的。

TP框架中的A方法和R方法的更多相关文章

  1. Java8新特性(一)_interface中的static方法和default方法

    什么要单独写个Java8新特性,一个原因是我目前所在的公司用的是jdk8,并且框架中用了大量的Java8的新特性,如上篇文章写到的stream方法进行过滤map集合.stream方法就是接口Colle ...

  2. 第二百五十八节,Tornado框架-逻辑处理get()方法和post()方法,初识模板语言

    Tornado框架-逻辑处理get()方法和post()方法,初识模板语言 Tornado框架,逻辑处理里的get()方法,和post()方法 get()方法,处理get方式的请求post()方法,处 ...

  3. JS中的call()方法和apply()方法用法总结

    原文引自:https://blog.csdn.net/ganyingxie123456/article/details/70855586 最近又遇到了JacvaScript中的call()方法和app ...

  4. js中的splice方法和slice方法简单总结

    slice:是截取用的 splice:是做删除 插入 替换用的 slice(start,end): 参数: start:开始位置的索引 end:结束位置的索引(但不包含该索引位置的元素) 例如: va ...

  5. JS中的call()方法和apply()方法用法总结(挺好 转载下)

    最近又遇到了JacvaScript中的call()方法和apply()方法,而在某些时候这两个方法还确实是十分重要的,那么就让我总结这两个方法的使用和区别吧. 1. 每个函数都包含两个非继承而来的方法 ...

  6. Mapper类/Reducer类中的setup方法和cleanup方法以及run方法的介绍

    在hadoop的源码中,基类Mapper类和Reducer类中都是只包含四个方法:setup方法,cleanup方法,run方法,map方法.如下所示: 其方法的调用方式是在run方法中,如下所示: ...

  7. java 中的set方法和get方法的理解

    get的意思是获取,set的意思是设置. get方法和set方法是实现类的封装访问的很好的工具. 当类中的变量设为private 时,他的意思就是说,只能通过自身和子类的访问,但是对于别的其他的类来说 ...

  8. java8新特性:interface中的static方法和default方法

    java8中接口有两个新特性,一个是静态方法,一个是默认方法. static方法 java8中为接口新增了一项功能:定义一个或者多个静态方法. 定义用法和普通的static方法一样: public i ...

  9. Java8新特性interface中的static方法和default方法

    static方法 java8中为接口新增了一项功能:定义一个或者更多个静态方法.用法和普通的static方法一样. 代码示例 public interface InterfaceA { /** * 静 ...

随机推荐

  1. HDU4548+筛素数

    先筛出素数,再筛出美素数. 简单题. /* 筛素数 */ #include<stdio.h> #include<string.h> #include<stdlib.h&g ...

  2. 关于OPC Client 编写2

    最近在搞到一个OPC动态库OPCAutomation.dll,该动态库在http://www.kepware.com/可下载,下面介绍如何用C#进行OPC Client开发. 1.新建C#应用程序,命 ...

  3. NDK开发环境搭建_r8

    本文主内容: 1.  Android NDK 安装 2.  安装Cygwin与使用NDK编译 3.  在Eclipse中集成C/C++开发环境CDT 4.  安装Sequoyah插件 5.  JNI编 ...

  4. 为 Tomcat 安装 apr

    apr 官方介绍: Tomcat可以使用APR来提供超强的可伸缩性和性能,更好地集成本地服务器技术. APR(Apache Portable Runtime)是一个高可移植库,它是Apache HTT ...

  5. TQ2440实现触摸屏和qt图形 解决segmentation fault

    使用触摸屏,首先安装触摸屏矫正程序. 下载并解压tslib-1.4,进入主文件夹,运行: 1 [root@localhost ~]#./autogen.sh 2 [root@localhost ~]# ...

  6. Pycharm 增加 run 控制台缓冲行数

    Yes, you can change the value of idea.cycle.buffer.size in bin/idea.properties under the PyCharm ins ...

  7. Expectation Maximization-EM(期望最大化)-算法以及源码

    在统计计算中,最大期望(EM)算法是在概率(probabilistic)模型中寻找参数最大似然估计的算法,其中概率模型依赖于无法观测的隐藏变量(Latent Variable).最大期望经常用在机器学 ...

  8. 启明星产品与微软Active Directory活动目录集成说明

    本文介绍启明星Helpdesk系统,如何和微软域集成. (1)确保在集成微软域之前,系统已经能够访问. (2)进入后台,用户管理页面,新加一个账户,此账户需要在微软域里(普通账户即可),然后在角色里设 ...

  9. google protocol buffer的原理和使用(二)

    本文主要会介绍怎么使用Google Protocol的Lib来序列化我们的数据,方法非常多种,本文仅仅介绍当中的三种.其它的方法读者能够通过自行研究摸索.但总的来说,序列化数据总的来说分为下面俩步: ...

  10. JDBC在Java Web中的应用——分页查询

    分页查询 通过JDBC实现分页查询的方法有很多种,而且不同的数据库机制也提供了不同的分页方式,在这里介绍两种非常典型的分页方法. 通过ResultSet的光标实现分页 通过ResultSet的光标实现 ...