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 相关文章推荐
PHP base64+gzinflate压缩编码和解码代码
Oct 03 PHP
据说是雅虎的一份PHP面试题附答案
Jan 07 PHP
具有时效性的php加密解密函数代码
Jun 19 PHP
一致性哈希算法以及其PHP实现详细解析
Aug 24 PHP
PHP分页详细讲解(有实例)
Oct 30 PHP
php单一接口的实现方法
Jun 20 PHP
PHP 中 Orientation 属性判断上传图片是否需要旋转
Oct 16 PHP
分享PHP计算两个日期相差天数的代码
Dec 23 PHP
PHP数组生成XML格式数据的封装类实例
Nov 10 PHP
thinkPHP中验证码的简单实现方法
Dec 05 PHP
Laravel基础_关于view共享数据的示例讲解
Oct 14 PHP
laravel邮件发送的实现代码示例
Jan 31 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
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
yii2整合百度编辑器umeditor及umeditor图片上传问题的解决办法
2016/04/20 PHP
PHP页面输出搜索后跳转下一页的处理方法
2016/09/30 PHP
php写入文件不覆盖的实例讲解
2019/09/17 PHP
PHP哈希表实现算法原理解析
2020/12/11 PHP
jquery.pagination.js 无刷新分页实现步骤分享
2012/05/23 Javascript
javascript获得网页窗口实际大小的示例代码
2013/09/21 Javascript
为指定的元素添加遮罩层的示例代码
2014/01/15 Javascript
firefox下jquery ajax返回object XMLDocument处理方法
2014/01/26 Javascript
JavaScript中的Math 使用介绍
2014/04/21 Javascript
href下载文件根据id取url并下载
2014/05/28 Javascript
推荐5 个常用的JavaScript调试技巧
2015/01/08 Javascript
详解使用jest对vue项目进行单元测试
2018/09/07 Javascript
vue-router 手势滑动触发返回功能
2018/09/30 Javascript
VUE引入第三方js包及调用方法讲解
2019/03/01 Javascript
JavaScript如何实现元素全排列实例代码
2019/05/14 Javascript
vue路由传参的基本实现方式小结【三种方式】
2020/02/05 Javascript
[48:46]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第二场 11.19
2020/11/19 DOTA
Python去掉字符串中空格的方法
2014/03/11 Python
python使用三角迭代计算圆周率PI的方法
2015/03/20 Python
Windows下Python2与Python3两个版本共存的方法详解
2017/02/12 Python
python实现读取excel写入mysql的小工具详解
2017/11/20 Python
Python 查看文件的编码格式方法
2017/12/21 Python
用pycharm开发django项目示例代码
2019/06/13 Python
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
美国汽车交易网站:Edmunds
2016/08/17 全球购物
Java里面StringBuilder和StringBuffer有什么区别
2016/06/06 面试题
求职信需要的五点内容
2014/02/01 职场文书
计生专干事迹
2014/05/28 职场文书
入党综合考察材料
2014/06/02 职场文书
乡镇领导班子四风对照检查材料
2014/09/27 职场文书
群众路线自我剖析及整改措施
2014/11/04 职场文书
幼儿园六一儿童节演讲稿
2015/03/19 职场文书
python3.7.2 tkinter entry框限定输入数字的操作
2021/05/22 Python
使用feign服务调用添加Header参数
2021/06/23 Java/Android
Mysql binlog日志文件过大的解决
2021/10/05 MySQL