php对象工厂类完整示例


Posted in PHP onAugust 09, 2018

本文实例讲述了php对象工厂类。分享给大家供大家参考,具体如下:

<?php
/**
 * 对象工厂
 * @author flynetcn
 */
class ObjectFactory
{
  private static $objSet = array();
  /**
   * 清空工厂中的对象
   */
  public function clear()
  {
    self::$objSet = array();
  }
  /**
   * 在工厂中创建对象并将其返回
   * 参数格式:$class_name, $class_param1, $class_param2, ...
   */
  public static function create()
  {
    $argc = func_num_args();
    if ($argc <= 0) {
      throw new Exception('params error', 1);
    }
    $args = func_get_args();
    $class_name = array_shift($args);
    $params = $args;
    if (!$params) {
      $class_sign = $class_name;
    } else {
      $param_sign = serialize($params);
      if (strlen($param_sign) > 100) {
        $param_sign = md5($param_sign);
      }
      $class_sign = $class_name.'@'.$param_sign;
    }
    if (isset(self::$objSet[$class_sign])) {
      return self::$objSet[$class_sign];
    }
    $ref = new ReflectionClass($class_name);
    if ($ref->hasMethod('__construct') && !empty($params)) {
      $obj = $ref->newInstanceArgs($params);
    } else {
      $obj = $ref->newInstance();
    }
    self::$objSet[$class_sign] = $obj;
    return $obj;
  }
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
模仿OSO的论坛(四)
Oct 09 PHP
PHP Smarty生成EXCEL文档的代码
Aug 23 PHP
PHP IN_ARRAY 函数使用注意事项
Jul 24 PHP
解析PHP自带的进位制之间的转换函数
Jun 08 PHP
PHP中的随机性 你觉得自己幸运吗?
Jan 22 PHP
Windows2003下php5.4安装配置教程(IIS)
Jun 30 PHP
php入门教程之Zend Studio设置与开发实例
Sep 09 PHP
ecshop适应在PHP7的修改方法解决报错的实现
Nov 01 PHP
PHP开发中解决并发问题的几种实现方法分析
Nov 13 PHP
PHPMAILER实现PHP发邮件功能
Apr 18 PHP
PHP获取MySQL执行sql语句的查询时间方法
Aug 21 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
May 02 PHP
php闭包中使用use声明变量的作用域实例分析
Aug 09 #PHP
php生成二维码不保存服务器还有下载功能的实现代码
Aug 09 #PHP
PHP命令Command模式用法实例分析
Aug 08 #PHP
PHP耦合设计模式实例分析
Aug 08 #PHP
thinkPHP框架整合tcpdf插件操作示例
Aug 07 #PHP
php实现往pdf中加数字签名操作示例【附源码下载】
Aug 07 #PHP
php使用环形链表解决约瑟夫问题完整示例
Aug 07 #PHP
You might like
FleaPHP的安全设置方法
2008/09/15 PHP
PHP中的Streams详细介绍
2014/11/12 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
2016/11/05 PHP
PHP7下协程的实现方法详解
2017/12/17 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
2019/08/27 PHP
神奇的7个jQuery 3D插件整理
2011/01/06 Javascript
你必须知道的JavaScript 中字符串连接的性能的一些问题
2013/05/07 Javascript
jQuery插件 Jqplot图表实例
2016/06/18 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
2017/04/13 jQuery
axios发送post请求springMVC接收不到参数的解决方法
2018/03/05 Javascript
vue实现a标签点击高亮方法
2018/03/17 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
2019/05/04 jQuery
JS+CSS实现随机点名(实例代码)
2019/11/04 Javascript
使用Vue生成动态表单
2019/11/26 Javascript
js绘制一条直线并旋转45度
2020/08/21 Javascript
python实现DES加密解密方法实例详解
2015/06/30 Python
在Python的Django框架中调用方法和处理无效变量
2015/07/15 Python
Python编程中类与类的关系详解
2019/08/08 Python
Python3 把一个列表按指定数目分成多个列表的方式
2019/12/25 Python
使用python创建Excel工作簿及工作表过程图解
2020/05/27 Python
python自动从arxiv下载paper的示例代码
2020/12/05 Python
Python+kivy BoxLayout布局示例代码详解
2020/12/28 Python
玩具反斗城天猫官方旗舰店:享誉全球的玩具店
2017/10/10 全球购物
体育教师自荐信范文
2013/12/16 职场文书
工程管理专业毕业生自荐信
2014/01/24 职场文书
幼儿园优秀班主任事迹材料
2014/05/14 职场文书
预防煤气中毒方案
2014/06/16 职场文书
教师节感恩老师演讲稿
2014/08/28 职场文书
村道德模范事迹材料
2014/08/28 职场文书
刑事上诉状范文
2015/05/22 职场文书
公司酒会致辞
2015/07/30 职场文书
工作转正自我鉴定范文
2019/06/21 职场文书
六年级情感作文之500字
2019/10/23 职场文书
nginx共享内存的机制详解
2022/03/21 Servers
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android