#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 ( )
```