ThinkPHP开发指南-模型之定义和实例化

来自站长百科
跳转至: 导航、​ 搜索

导航:上一页

ThinkPHP2.0版本中,可以无需进行任何模型定义。只有在需要封装单独的业务逻辑的时候,模型类才是必须被定义的,因此ThinkPHP在模型上有很多的灵活和方便性,让你无需因为表太多而烦恼。

根据不同的模型定义,我们有几种实例化模型的方法,下面来分析下什么情况下用什么方法:

  • 实例化基础模型(Model) 类

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

PHP代码

$User = new Model('User'); 

或者使用M快捷方法实例化是等效的

PHP代码

$User = M('User');    

$User->select(); // 进行其他的数据操作 

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

  • 实例化其他模型类

第一种方式实例化因为没有模型类的定义,因此很难封装一些额外的逻辑方法,不过大多数情况下,也许只是需要扩展一些通用的逻辑,那么就可以尝试下面一种方法。

M方法默认是实例化Model类,如果需要实例化其他模型类,可以使用

PHP代码

$User = M('User', 'CommonModel'); 

上面的方法等效于

PHP代码

$User = new CommonModel('User'); 

因为系统的模型类都能够自动加载,因此我们不需要在实例化之前手动进行类库导入操作。模型类commonModel必须继承Model,如果没有定义别名导入的话,需要放在项目Model下。我们可以在CommonModel类里面定义一些通用的逻辑方法,就可以省去为每个数据表定义具体的模型类,如果你的项目已经有超过100个数据表了,而大多数情况都是一些基本的CURD操作的话,只是个别模型有一些复杂的业务逻辑需要封装,那么第一种方式和第二种方式的结合是一个不错的选择。

  • 实例化用户定义的模型(×××Model)类

这种情况是使用的最多的,一个项目不可避免的需要定义自身的业务逻辑实现,就需要针对每个数据表定义一个模型类,例如UserModel 、InfoModel等等。

定义的模型类通常都是放到项目的LibModel目录下面。例如,

PHP代码

class UserModel extends Model{ 
 Public function myfun(){    

 // 添加自己的业务逻辑    

 // ………    

}    

} 

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

PHP代码


$User = new UserModel();

或者使用D快捷方法实例化是等效的

PHP代码

$User = D('User');    

$User->select(); // 进行其他的数据操作

D方法可以自动检测模型类,不存在时系统会抛出异常,同时对于已实例化过的模型,不会重复去实例化。默认的D方法只能支持调用当前项目的模型,如果需要跨项目调用,需要使用:

PHP代码

$User = D('User', 'Admin'); // 实例化Admin项目下面的User模型    

$User->select(); 

如果启用了模块分组功能,可使用:

PHP代码

$User = D('Admin.User'); 
  • 实例化空模型类

如果你仅仅是使用原生SQL查询的话,不需要使用额外的模型类,实例化一个空模型类即可进行操作了,例如:

PHP代码

$Model = new Model();

// 或者使用M快捷方法实例化是等效的

PHP代码

<pre>
$Model = M();  
$Model->query('SELECT * FROM think_user where status=1');  

空模型类也支持跨项目调用。