ThinkPHP的A方法,R方法,M方法,D方法区别

在Thinkphp中,实例化对象有这么几种方法,如果是类,有A和R方法,区别是A方法只是对象的实例化,而R方法是可以同时实例化对象里面的方法的,这里需要去指定,如下面的实例代码:

 1 <?php
 2 namespace Admin\Controller;
 3 use Think\Controller;
 4
 5 class GoodsController extends Controller{
 6     public function showlist(){
 7
 8         //实例化控制器A方法
 9         $test=A("Manager");
10         echo $test->test1();
11
12         echo "<br/>";
13
14         //也可以去跨模块调用
15         $test_m=A("Home/Goods");
16         echo $test_m->test();
17
18         echo "<br/>";
19         //R方法可以取执行对应模块下面的
20         R("Home/Goods/test");
21         // $this->display();
22     }
23 }

从上面可以看出,R方法同时也可以去跨模块去实例化。

另外我们在Model的数据模型里面,必然需要下面的两种方法,一个是D方法,一个是M方法,前者是实例化数据模型类,而后者则是实例化数据模型的父类。

 1 <?php
 2 namespace Admin\Controller;
 3 use Think\Controller;
 4 class TestController extends Controller{
 5     public function test1(){
 6         $mythinkphp=M("user");
 7         $t=$mythinkphp->select();
 8         echo "<pre>";
 9         // var_dump($mythinkphp->select());
10         // echo count($t);
11         // echo "<br/>";
12         // echo count($t[1]);
13         // echo "<br/>";
14         // for($i=0; $i<count($t); $i++){
15         //         if($t[$i][‘name‘]==‘xuning‘){
16         //             echo "存在这个用户,用户ID为".($i-1);
17         //         }
18         // }
19         // echo "<br/>";
20         //这样就完成了从数据库里面去遍历数据
21         echo "<center>";
22         echo "<h1>This is table test content</h1>";
23         echo "<table border=‘1px‘>";
24         for($i=0; $i< count($t); $i++){
25             echo "<tr>";
26                     echo "<td>";
27                     echo $t[$i][‘id‘];
28                     echo "</td>";
29                     echo "<td>";
30                     echo $t[$i][‘name‘];
31                     echo "</td>";
32                     echo "<td>";
33                     echo $t[$i][‘password‘];
34                     echo "</td>";
35             echo "</tr>";
36         }
37         echo "</table>";
38         echo "</center>";
39         echo "</pre>";
40         $t2=D("test_1");
41         $temp=$t2->select();
42         echo $temp[0][‘name‘];
43     }
44     public function test2(){
45         //其实这里的实例化是建立的数据库对象,并不是精确到表,同时
46         //我们也可以不是建立数据模型,从而直接使用,所以,
47         $t=new \Model\TestModel;
48         show_bug($t);
49     }
50     public function test3(){
51         $user=D("Test");
52         show_bug($user);
53     }
54 }

虽然从用法上看不出什么差别,但是内部确实不同的,D方法只实例化定义的数据模型类,而M方法去实例化数据模型的父类。

参考http://blog.csdn.net/mycodedream/article/details/45340949

时间: 2024-08-26 22:51:59

ThinkPHP的A方法,R方法,M方法,D方法区别的相关文章

Thinkphp的A,R,M,D方法区别

在Thinkphp中,实例化对象有这么几种方法,如果是类,有A和R方法,区别是A方法只是对象的实例化,而R方法是可以同时实例化对象里面的方法的,这里需要去指定,如下面的实例代码: <?php namespace Admin\Controller; use Think\Controller; class GoodsController extends Controller{ public function showlist(){ //实例化控制器A方法 $test=A("Manager&qu

安装R语言的包的方法

安装R语言的包的方法: 1. 在线安装 在R的控制台,输入类似install.packages("TSA")  # 安装 TSA install.packages("TSA", contriburl="url",  dependencies = TRUE) # 安装TSA 2. 手动安装(离线安装) 在Windows下: 下载对应的package.zip文件 打开R的菜单条->Packages->"Install packa

R语言-连接MySQL数据库方法

版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] R语言连接数据库常用的方法有2种: 1.使用R数据库接口 连接MySQL,使用RMySQL包,使用前RMySQL包要先安装. library(RMySQL) 连接方式有2种: (1)使用dbConnectconn <- dbConnect(MySQL(), dbname = "rmysql", username="rmysql", password="rmysql",

linux下rm -r误删NTFS文件恢复方法

linux下rm -r误删NTFS文件恢复方法(nfs-3g) 一时疏忽,手一抖,把整个挂载的F盘删了一半!顿时傻眼!! 被删的F盘是Windows下NTFS分区,在Ubuntu12.04中挂载了F盘,使用rm命令时粗心大意,误删了一半的数据. 血的教训告诉我们,使用rm -r命令一定要带上-i,否则让你后悔莫及! 还好在Linux下有一种方法可以恢复被删除的NTFS分区文件. 本文地址:http://www.cnblogs.com/yhLinux/p/4106099.html 在文件被误删后,

go语音之进阶篇方法面向过程和对象函数的区别

1.方法 (method) 在面向对象编程中,一个对象其实也就是一个简单的值或者一个变量,在这个对象中会包含一些函数,这种带有接收者的函数,我们称为方法(method). 本质上,一个方法则是一个和特殊类型关联的函数. 一个面向对象的程序会用方法来表达其属性和对应的操作,这样使用这个对象的用户就不需要直接去操作对象,而是借助方法来做这些事情. 在Go语言中,可以给任意自定义类型(包括内置类型,但不包括指针类型)添加相应的方法. 方法总是绑定对象实例,并隐式将实例作为第1实参 (receiver)

Physics 碰撞检测回调方法出错或者没有效果解决方法

1.碰撞检测回调方法编译出错; auto *listener = EventListenerPhysicsContact::create(); listener->onContactBegin = CC_CALLBACK_1(HelloWorld::onContactBegin,this); 在3.0rc版本中回调函数的参数变为一个,不能使用原来的两个参数; bool HelloWorld::onContactBegin(PhysicsContact& contact) { auto spr

JQ中的clone()方法与DOM中的cloneNode()方法

JQ中的clone()方法与DOM中的cloneNode()方法 cloneNode()定义和用法 cloneNode()方法创建节点的拷贝,并返回该副本. 语法: node.cloneNode(deep);  其接收一个可选参数"deep",为布尔类型,默认是false. 当设置为true,克隆当前节点,属性及当前节点的后代.若设置为false,仅仅克隆当前元素节点本身. 扩展:  使用cloneNode()方法,当被克隆的节点绑定了事件处理程序,事件处理程序是否会被一同克隆,这个我

c# 中面相对性的三个特点:封装,继承,多态, 以及c#中隐藏(new)和方法重写(override)和重载(overload)的区别

封装 1)封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问,通常有两种访问方式:set 设置,get 获取. 2)封装结果:存在但是不可见. 3) 访问修饰符 声明的可访问性                                 含义 public                                    访问不受限制. protected                              访问仅限于本类或者其子类(可以跨程序集). p

jQuery用unbind方法去掉hover事件及其他方法介绍

近日项目开发十分的繁忙,其中一个需求是实现响应式导航.(响应式的问题我们在css相关的博客中再交流) 大家都知道导航是需要下来菜单效果的,必然就会用到 jQuery的 hover() 方法.若是导航放在ipad中,自然hover()就没有什么意义了.那该如何取消hover()并添加touch事件呢? 今天遇到jquery需要去掉hover的问题,原以为直接unbind(“hover”)就可以搞定,可是搞了半天都报错. 原因其实很简单,hover并不是事件.打开参考手册,hover其实由 mous