Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1204655
  • 博文数量: 252
  • 博客积分: 5421
  • 博客等级: 大校
  • 技术积分: 2418
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-17 12:59
文章分类

全部博文(252)

文章存档

2017年(3)

2016年(18)

2015年(31)

2014年(18)

2013年(7)

2012年(8)

2011年(12)

2010年(30)

2009年(32)

2008年(57)

2007年(36)

分类: PHP

2015-08-22 14:59:25


  1. <?php
  2. /**
  3.  * 对象工厂
  4.  * @author flynetcn
  5.  */
  6. class ObjectFactory
  7. {
  8.     private static $objSet = array();

  9.     /**
  10.      * 清空工厂中的对象
  11.      */
  12.     public function clear()
  13.     {
  14.         self::$objSet = array();
  15.     }

  16.     /**
  17.      * 在工厂中创建对象并将其返回
  18.      * 参数格式:$class_name, $class_param1, $class_param2, ...
  19.      */
  20.     public static function create()
  21.     {
  22.         $argc = func_num_args();
  23.         if ($argc <= 0) {
  24.             throw new Exception('params error', 1);
  25.         }
  26.         $args = func_get_args();
  27.         $class_name = array_shift($args);
  28.         $params = $args;
  29.         if (!$params) {
  30.             $class_sign = $class_name;
  31.         } else {
  32.             $param_sign = serialize($params);
  33.             if (strlen($param_sign) > 100) {
  34.                 $param_sign = md5($param_sign);
  35.             }
  36.             $class_sign = $class_name.'@'.$param_sign;
  37.         }
  38.         if (isset(self::$objSet[$class_sign])) {
  39.             return self::$objSet[$class_sign];
  40.         }
  41.         $ref = new ReflectionClass($class_name);
  42.         if ($ref->hasMethod('__construct') && !empty($params)) {
  43.             $obj = $ref->newInstanceArgs($params);
  44.         } else {
  45.             $obj = $ref->newInstance();
  46.         }
  47.         self::$objSet[$class_sign] = $obj;
  48.         return $obj;
  49.     }
  50. }

阅读(542) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~