## Idea模型实例化
无论是数据库对象还是模型对象,Idea都进行了很好的单例化实现。
简要的说实例化模型对象有三种方法,我们推荐使用第二方法:
* 第一种方法较为传统,就是简单的new出一个对象
~~~
<?php
namespace app\home\controller;
class Index extends Common{
public function userInfo(){
$obj_user = new \app\home\model\User();
$userInfo = $obj_user->userInfo();
}
}
~~~
* 第二种方法是使用工厂模式实例化出单例模型,如果需要模型跨模块(平台)调用时,可以这样实例化
~~~
<?php
namespace app\home\controller;
class Index extends Common{
public function userInfo(){
$obj_user=\system\Model::getModel('\app\home\model\User');
$userInfo = $obj_user->userInfo();
}
}
~~~
>[warning]注意:第一、二种方法支持跨模块调用(特殊需求),第三种不支持
* 第三种方法使用内置的辅助函数`model()`,主要是对第二种方法的函数封装,但不支持跨模型。可以进行模型单例化
共方法辅助函数`model()`有两个参数,直接在控制器类里面调用就行
| model方法参数 | 值 | 属性 |
| -- | -- | -- |
| 参数1 | 模型名 | 必要 |
| 参数2 | 模型方法名 | 可选(当调用的方法有参数时不使用) |
如果只设置了第一参数,实例化模型代码如下
```
<?php
namespace app\home\controller;
class Index extends Common{
public function User(){
$objUser=model('User');
$userInfo=$objUser->userInfo();
}
}
```
如果设置了第二个参数,上面的代码等效于
```
<?php
namespace app\home\controller;
class Inde extends Common{
public function userInfo(){
//实例化并调用模型操作
$user_info=model('User','userInfo');
}
}
```
>[danger]注意:但如果调用的模型方法需要传参,则不要使用第二参数