1. 程式人生 > >MVC框架(四)驅動類 - 工廠模式

MVC框架(四)驅動類 - 工廠模式

同時 exist class ... string obj 所有 獲取對象 ret

將框架中大部分要創建的對象,都經由驅動類創建,獲取,判斷。這樣做有如下好處:

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框架(四)驅動類 - 工廠模式