码迷,mamicode.com
首页 > Web开发 > 详细

MVC框架(四)驱动类 - 工厂模式

时间:2017-05-16 18:35:49      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:color   抽象   init   filename   creat   对象   .class   存在   隔离   

将框架中大部分要创建的对象,都经由驱动类创建,获取,判断。这样做有如下好处:

1 统一管理所有创建的类,包括创建前处理与创建后处理

2 单一创建,防止多次创建类

实例:

<?php
/**
 *驱动类 - 工厂模式
 */
abstract class Driver  //抽象类
{
    // 配置数组
    protected static $configs = array ();
    // 实例数组
    protected static $instance = array ();
    public static function init()
    {
     ........//初始化处理,可以加载类的base基类等其他操作 $driver
= get_called_class(); //获取调用的类名 $className = $driver . Base; if (! class_exists($className, false)) { ........ } } /** * 创建驱动实例 * * @param string $name * @param string $alias * @param array $args * @return mixed */ public static function create($name, $alias = ‘‘) { $name = ucfirst($name); $driver = get_called_class(); //获取调用的类名 // 类名 $className = $driver . $name; // 是否存在该类实例 if (isset(self::$instance[$driver][$alias])) { return self::$instance[$driver][$alias]; //防止多次创建 } else { // 驱动路径 $fileName = "{$driver}/{$className}.class.php"; // 引入驱动文件 if (require_once $fileName) { // 实例化 $ref = new ReflectionClass($className); //反射类 $args = array_slice(func_get_args(), 2); //参数隔离 self::$instance[$driver][$alias] = $ref->newInstanceArgs($args); //反射类实例化,同时这里会调用实例化类的构造方法,并传递参数 self::$configs[$driver][] = $className; } else { // 引入驱动失败 return false; } // 返回实例 return self::$instance[$driver][$alias]; } } /** * 获得驱动实例,不存在返回null * * @param type $name * @return mixed */ public static function getObj($name=‘‘) { static $driver; // 第一次获取当前驱动名 if (null === $driver) { $driver = get_called_class(); } if (isset(self::$instance[$driver][$name])) { return self::$instance[$driver][$name]; } else { return null; } } public static function exists($name) { static $driver; // 第一次获取当前驱动名 if (null === $driver) { $driver = get_called_class(); } return isset(self::$instance[$driver][$name]); } /** * 获取驱动实例数量 * * @return int */ public static function length($name) { return count(self::$configs[$name]); } }

此处用了反射类

创建的时候用:

 Db::create($option[type], $name, $option);

获取对象实例:

$obj = self::getObj($name);

 

MVC框架(四)驱动类 - 工厂模式

标签:color   抽象   init   filename   creat   对象   .class   存在   隔离   

原文地址:http://www.cnblogs.com/zhenghongxin/p/6862019.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!