## 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]注意:但如果調用的模型方法需要傳參,則不要使用第二參數