🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
#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 ( ) ```