#13.封裝一個單例模式的MODEL類
單例模式就是一個類在使用的時候只能有一個實例,類的實例是在類內部進行創建,好處是大大的節省了資源的開銷,方便訪問類的實例,使用最多的地方是數據庫類的封裝。具體實現的方法是將我們的構造方法進行private進行修飾,禁止在類外進行實例化,因此只要你在類面進行實例化,就會報錯。再類里面定義一個,可以在類里面得到一個實例的方法。判斷類是否存在,如果存在則返回否則創建。
我們創建一個model.class.php數據庫操作類
```cpp
|-core 框架核心目錄
| |-Model.class.php 數據庫操作類 業務邏輯層
<?php
/**
* 數據庫操作類
* User: find35.com
* Date: 15/12/27
* Time: 下午4:52
*/
class Model
{
protected static $_instance;
//單例模式 不允許在類外對類進行實例化
private function __construct(){}
//獲得類的實例
public static function getSingleton(){
//判斷我們類的實例是否存在,沒有則創建之
if(!isset(self::$_instance)){
self::$_instance = new self();
}
return self::$_instance;
}
}
```
再類中對構造函數給予了private權限,因此無法在外面對這個類進行實例化,然后我們在入口文件這里執行以下這個方法,看看有沒有東西
```cpp
|-index.php 項目前臺入口文件,單一入口
<?php
/**
* 項目前臺入口文件
* User: find35.com
* Date: 15/12/24
* Time: 下午5:15
*/
echo "<meta charset='utf-8'>";
require_once 'core/App.class.php';
//注冊一個
define('APP','app');
spl_autoload_register(array('App','myAutoloader'));
try{
App::run();
}catch(MyException $e){
$e->showError($e->getMessage());
}
$db = Model::getSingleton();
print_r($db);
```
此時我們在瀏覽器中輸入
```cpp
http://localhost/php_mvc/
```
如果返回如下,則表示成功
```cpp
前臺首頁Model Object ( )
```