02-如何实例化模型

简介: 原文:02-如何实例化模型在ThinkPHP中,可以无需进行任何模型定义。只有在需要封装单独的业务逻辑的时候,模型类才是必须被定义的,因此ThinkPHP在模型上有很多的灵活和方便性,让你无需因为表太多而烦恼。
原文: 02-如何实例化模型

在ThinkPHP中,可以无需进行任何模型定义。只有在需要封装单独的业务逻辑的时候,模型类才是必须被定义的,因此ThinkPHP在模型上有很多的灵活和方便性,让你无需因为表太多而烦恼。 根据不同的模型定义,我们有几种实例化模型的方法,下面来分析下什么情况下用什么方法:

1、实例化基础模型(Model) 类 在没有定义任何模型的时候,我们可以使用下面的方法实例化一个模型类来进行操作:

  1. //实例化User模型
  2. $User = new Model('User');
  3. //或者使用M()快捷方法实例化,和上面的方法是等效的
  4. $User = M('User');
  5. //执行其他的数据操作
  6. $User->select();

这种方法最简单高效,因为不需要定义任何的模型类,所以支持跨项目调用。缺点也是因为没有自定义的模型类,因此无法写入相关的业务逻辑,只能完成基本的CURD操作。

 

2、实例化用户自定义模型(×××Model)类 这种情况是使用的最多的,一个项目不可避免的需要定义自身的业务逻辑实现,就需要针对每个数据表定义一个模型类,例如UserModel 、InfoModel等等。 定义的模型类通常都是放到项目的Lib\Model目录下面。例如,

  1. <?php
  2.     class UserModel extends Model{
  3.         public function getTopUser(){
  4.             //添加自己的业务逻辑
  5.              // ...
  6.         }
  7.     }

其实模型类还可以继承一个用户自定义的公共模型类,而不是只能继承Model类。 要实例化自定义模型类,可以使用下面的方式:

  1. <?php
  2.     //实例化自定义模型
  3.     $User = new UserModel();
  4.     //或者使用D快捷方法
  5.     $User = D('User');
  6.     //执行具体的数据操作
  7.     $User->select();

D方法可以自动检测模型类,如果存在自定义的模型类,则实例化自定义模型类,如果不存在,则会实例化Model基类,同时对于已实例化过的模型,不会重复去实例化。 D方法还可以支持跨项目和分组调用,需要使用:

  1. //实例化Admin项目的User模型
  2. D('Admin://User')
  3. //实例化Admin分组的User模型
  4. D('Admin/User')
目录
相关文章
|
2月前
|
存储 安全 C++
如何优雅地在C++库中实现实例化设计(二)
如何优雅地在C++库中实现实例化设计
15 0
|
20天前
|
存储 Java 编译器
类、对象、方法
摘要: 本文介绍了面向对象编程的概念,以京东购买手机为例,展示了如何通过分类和参数选择商品,强调软件与现实生活的对应关系。柯南三步走揭示了京东如何通过搜索和筛选帮助用户找到所需商品,而这一切背后的编程思想即为面向对象编程。面向对象编程涉及抽象、自定义类型和实例化对象等步骤,其中自定义类型(如Java中的类)用于封装现实生活中的复杂数据。文章还讲解了如何定义类、实例化对象以及访问权限修饰符、构造方法、this关键字、方法的使用,强调了方法参数和返回值在不同数据类型上的处理差异。整个讨论旨在阐明Java中面向对象编程的基本原理和实践应用。
19 5
|
2月前
|
存储 设计模式 缓存
如何优雅地在C++库中实现实例化设计(一)
如何优雅地在C++库中实现实例化设计
21 0
|
2月前
深入类的方法
深入类的方法
9 0
|
11月前
|
编译器 C++
C++ 构造函数的分类及调用
C++ 构造函数的分类及调用
77 0
|
11月前
|
存储
什么是实例化?
什么是实例化?
50 0
|
12月前
|
设计模式 Python
我为什么要创建一个不能被实例化的类
我为什么要创建一个不能被实例化的类
42 0
|
编译器 程序员 C++
高效学 C++|组合类的构造函数
设计好MyString类后,就可以像使用普通类型一样使用它了。例如,类的对象可以像普通的变量一样作为另一个类的数据成员。
171 0
高效学 C++|组合类的构造函数
构造函数与实例化之间的关系和原型的引入
构造函数与实例化之间的关系和原型的引入
|
C++ 小程序
c++类的实例化,有没有new的区别
A a; A * a = new a(); 以上两种方式皆可实现类的实例化,有new的区别在于: 1.前者在堆栈中分配内存,后者为动态内存分配,在一般应用中是没有什么区别的,但动态内存分配会使对象的可控性增强。
1172 0